2011-06-15 14 views
5

Lo que intento hacer es automatizar el proceso de publicación en sitios web. Estos sitios web se crean dinámicamente usando toda htaccess, así que aquí es un ejemplo:¿Utiliza PHP para agregar dinámicamente al archivo .htaccess?

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] 
RewriteRule ^(.*)$ /folder%{REQUEST_URI}?%{QUERY_STRING} [QSA,L] 

Lo que hago es añadir un alias de dominio para domain.com, y luego apunte a mi IP del servidor y las marcas de archivos .htaccess ve lo que está en la carpeta /.

Funciona bien, pero estamos planeando tener cientos de sitios web y agregar ese fragmento de código manualmente a htaccess puede ser bastante molesto. Como todo lo que estoy cambiando es domain.com y /folder, hay una forma de usar PHP para agregar dinámicamente al final del archivo .htaccess si creo un formulario y le digo el dominio y la carpeta, lo agregará a la parte inferior del archivo htaccess?

Eso ahorraría mucho tiempo.

Muchas gracias.

+4

Sí, es posible, pero tenga en cuenta los riesgos de seguridad y las entradas duplicadas. – CSchulz

Respuesta

26

Realmente no recomiendo permitir que php agregue NADA en .htaccess, es un gran riesgo de seguridad.

//but here is your code 
$f = fopen(".htaccess", "a+"); 
fwrite($f, "your content"); 
fclose($f); 
+8

-1 para declaraciones de seguridad totalmente sin fundamento. – mario

+0

@mario: ¿No te parece tan grande "Realmente no recomiendo permitir que php agregue ** CUALQUIER COSA ** en .htaccess, es un gran riesgo de seguridad"? sin código, mi respuesta sería eliminada – genesis

+0

@mario: dije "No recomiendo hacer". Si siempre hay un gran riesgo e incluso un pequeño error, podría ser el phishing paradise – genesis

4

Sure. Es solo otro archivo, siempre que el proceso tenga permiso para escribir en el archivo.

6

Aquí van:

function writeht($domain, $folder) 
{ 
    $fp = fopen('.htaccess','a+'); 
    if($fp) 
    { 
     fwrite($fp,' 

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
RewriteCond %{HTTP_HOST} ^(www\.)?'.str_replace('.','\.',$domain).'$ [NC] 
RewriteRule ^(.*)$ /'.$folder.'%{REQUEST_URI}?%{QUERY_STRING} [QSA,L]'); 
     fclose($fp); 
    } 
} 

//usage: writeht("domain.biz","yourfolder"); 

me da buenos resultados con 0644 permisos en .htaccess (como php se ejecuta bajo el mismo usuario que el propietario del archivo)

+0

Muchas gracias. Esto funcionó muy bien. Sé que esto es un gran riesgo de seguridad, ¿qué podría pasar? – Drew

+0

si le pareció útil, podría aceptar la respuesta. Hasta que tus permisos en '.htaccess' permanezcan en 0644, esto no es un riesgo de seguridad. (asumiendo que la función será llamada solo por personas de confianza) – technology

+0

OK ¡Lo acepté! Una pregunta, sin embargo, no funciona para mí a las 06:44 pero funciona cuando lo hago 0666. ¿Alguna idea de por qué? ¿Es más un riesgo de seguridad en 666? – Drew

2

Una forma muy cómoda está utilizando el PEAR clase File_HtAccess. Pero como se dijo antes, no debe escribir el archivo desde un PHP-Script al que se puede acceder a través de la web.

Cuestiones relacionadas