2012-06-28 9 views
5

Esta es una exension a this question donde nos enteramos de que podemos establecer una var $_SERVER usando .

La siguiente pregunta es: ¿Hay una manera de utilizar SetEnv esencialmente como esto:

/var/www/www.example.com/module/unique_section/.htaccess:

SetEnv RESOURCE_ROOT %{DIRECTORY} 

/var/www/www.example.com/módulo/unique_section/some/ruta/archivo.php

<?php echo $_SERVER['RESOURCE_ROOT']; ?> 

salida: /var/www/www.example.com/module/unique_section/

+0

¿Desea * específicamente * el directorio en el que se encuentra el archivo '.htaccess'? – Josh

+0

Realmente estoy haciendo dos preguntas: (1) ¿Es posible usar variables al establecer variables? (Las respuestas a continuación me dicen, sí); y (2) ¿Cómo puedo usar esa funcionalidad para establecer una variable de entorno con el directorio en el que se encuentra el archivo .htaccess? –

+0

OK. La pregunta es, ¿puede un 'RewriteRule' saber en qué directorio está el archivo' .htaccess'. No lo creo ... pero podría usar '% {DOCUMENT_ROOT}' más una cadena estática ... Lo haré investiga esto más a fondo ... – Josh

Respuesta

5

Dependiendo de la información que requiera, puede poder hacer esto con un RewriteRule. Por ejemplo:

RewriteEngine On 
RewriteCond %{DOCUMENT_ROOT} (.*) 
RewriteRule (.*) - [E=RESOURCE_ROOT:%1] 

establecerá el PHP var $_SERVER['RESOURCE_ROOT'] o $_SERVER['REDIRECT_RESOURCE_ROOT'] a tu raíz de documentos de Apache. Consulte the mod_rewrite manual para obtener detalles completos, pero es posible que una combinación de %{DOCUMENT_ROOT}, %{PATH_INFO} y %{REQUEST_FILENAME} funcione para usted.

No creo que sea posible que el archivo .htaccess sepa en qué directorio se encuentra. Por lo tanto, creo que necesitará utilizar rutas de acceso codificadas dentro de su archivo .htaccess. A modo de ejemplo:

RewriteEngine On 
RewriteCond %{DOCUMENT_ROOT} (.*) 
RewriteRule (.*) - [E=RESOURCE_ROOT:%1/module/unique_section/] 
4

por lo que yo puedo decir, SetEnv no tiene acceso a las variables de entorno de Apache. Por lo tanto, el% {DIRECTORIO} no funcionaría a menos que quisiera que el valor fuera específicamente "% {DIRECTORIO}". El uso de mod_rewrite, esto funcionó para mí para obtener la ruta del archivo que se está cargando:

RewriteEngine On 

RewriteCond %{SCRIPT_FILENAME} ((.*)/) 
RewriteRule (.*) - [E=RESOURCE_ROOT:%1] 

salidas:

var_dump(__FILE__); 
//outputs: string(27) "/var/www/sub/test/index.php" 
var_dump($_SERVER['RESOURCE_ROOT']); 
//outputs: string(24) "/var/www/sub/test/" 

Aparte de eso, ¿hay algo malo con sólo utilizando php y haciendo dirname(__FILE__) o dirname($_SERVER['PHP_SELF']) ?

+0

¡GRACIAS! Esto es MUY cercano a lo que estoy preguntando, pero no estoy pidiendo el directorio en el que se encuentra el script, estoy pidiendo el directorio en el que está el .htaccess. (Mire las rutas y genere la pregunta un poco más cerca para ver lo que quiero decir.) –

+1

@ NathanJ.Brauer AFAIK no se puede saber qué archivo .htaccess se está cargando sin usar php y simplemente subiendo por la ruta hasta que encuentre un archivo .htaccess. –

2

Puede usar la función apache_getenv para obtener lo que desea.

Enlace: http://php.net/manual/en/function.apache-getenv.php

No se olvide de leer la documentación:

Esta función requiere Apache 2 de lo contrario es indefinido.

Ejemplo:

<?php 
$ret = apache_getenv("SERVER_ADDR"); 
echo $ret; 
?> 

El resultado del ejemplo sería algo similar a:

42.24.42.240 

Pero, como se sugiere en esta amenaza, que sólo podría utilizar dirname(__FILE__) y a partir de PHP 5.3.0 puedes usar __DIR__ como una constante mágica.

Cuestiones relacionadas