2012-01-17 42 views
6

Tengo un .htaccess que asigna un dominio a una carpeta.Editar .htaccess con PHP

RewriteEngine On 
RewriteBase/

# redirect mapped domain 
ReWriteCond %{HTTP_HOST} joshblease.uk.to 
ReWriteCond %{REQUEST_URI} !gme-index/ 
ReWriteRule ^(.*)$ gme-index/$1 [L] 

¿Hay alguna manera de editar/agregar más mapas de dominio al archivo usando PHP?

Simplemente, quiero obtener el contenido del archivo .htaccess y agregarlo usando un script PHP.

+0

Nooooooooooooooo Nunca edite.htaccess con PHP, solo está solicitando problemas de seguridad ... – Cyclone

+6

@Cyclone: ​​si se realiza correctamente, no supone un riesgo para la seguridad. – ThiefMaster

+0

Nada todavía y he mirado alrededor por un buen rato, lo siento si es mucho. Soy un desarrollador novato. Es como cpanel y cómo se añaden las redirecciones http con eso. –

Respuesta

3

Como se sugirió en uno de los comentarios anteriores, es mejor usar RewriteMap para su caso aquí en lugar de tratar de editar .htaccess desde el código PHP directamente. Este es un ejemplo de cómo se usa:

  1. Agregar siguiente línea a su archivo httpd.conf:

    RewriteMap domainMap txt://path/to/domain-dir.txt 
    
  2. Cree un archivo de texto como /path/to/domain-dir.txt así:

    sub1 /subdir1 
    sub2 /foodir2 
    foo /bar 
    
  3. Agregue estas líneas en su archivo .htaccess:

    Options +FollowSymLinks -MultiViews 
    RewriteEngine on 
    RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
    RewriteRule ^$ ${domainMap:%1} [L,R] 
    

Efectivamente todo esto significa es que estas redirecciones en su lugar:

  • sub1.domain.com/ => sub1.domain.com/subdir1
  • sub2.domain.com/ => sub2.domain.com/foodir2
  • foo.domain.com/ => foo.domain.com/bar

Ventaja: Con esta configuración en su lugar, puede editar o recrear el archivo /path/to/domain-dir.txt como Como quiera de su código php sin abrir un gran agujero de seguridad, permita el código php o edite .htaccess directamente.

+0

¿Hay alguna forma de hacerlo sin el archivo httpd.conf? Estoy en hosting compartido. –

+0

Desafortunadamente no porque la directiva 'RewriteMap' solo va al archivo httpd.conf. Sin embargo, será solo un cambio ** una vez ** en httpd.conf. – anubhava

3

Esto podría funcionar en su situación:

enmendar el .htaccess para buscar el siguiente:

RewriteEngine On 
RewriteBase/

# redirect mapped domain 
ReWriteCond %{HTTP_HOST} joshblease.uk.to 
ReWriteCond %{REQUEST_URI} !gme-index/ 
ReWriteRule ^(.*)$ gme-index/$1 [L] 

###CUSTOM RULES### 

script php asumiendo reglas $ sostiene las nuevas reglas generadas para ser ammended;

$htaccess = file_get_contents('/path/to/.htaccess'); 
$htaccess = str_replace('###CUSTOM RULES###', $rules."\n###CUSTOM RULES###", $htaccess); 
file_put_contents('/path/to/.htaccess', $htaccess); 

ejemplo anterior es teoría y no ha sido probado, sería dependiente de privledges .htaccess y permisos del script.

1

Puede usar el siguiente htaccess para asignar cualquier dominio que no sea maindomain.com a una carpeta que tenga el mismo nombre que el nombre de dominio.

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
ReWriteCond %{HTTP_HOST} !maindomain.com 
ReWriteCond %{HTTP_HOST} (.*) 
ReWriteRule ^(.*)$ %1/$1 [L] 

alternativamente; para asignar la carpeta al nombre de dominio sin ltd.

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
ReWriteCond %{HTTP_HOST} !maindomain.com 
ReWriteCond %{HTTP_HOST} ^([^\.]*) 
ReWriteRule ^(.*)$ %1/$1 [L] 

No es exactamente lo que quería, pero podría funcionar para usted, y no necesita ningún php.