2012-06-28 3 views
5

Это расширение до this question, где мы узнаем, что мы можем установить $_SERVER var, используя SetEnv.

Следующий вопрос: Есть ли способ использовать SETENV по существу, как это:

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

SetEnv RESOURCE_ROOT %{DIRECTORY} 

/вар/WWW/www.example.com/модуль/unique_section/некоторые/путь/file.php

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

Выход: /var/www/www.example.com/module/unique_section/

+0

Итак, вы * специально * хотите, чтобы в каталоге находился файл .htaccess? – Josh

+0

Я задаю два вопроса: (1) Можно ли использовать переменные при настройке переменных? (Ответы ниже говорят мне, да); и (2) Как я могу использовать эту функциональность для установки переменной окружения в каталоге, в котором находится файл .htaccess? –

+0

ОК. Вопрос в том, может ли 'RewriteRule' знать, в какую директорию находится файл .htaccess. Я так не думаю ... но вы могли бы использовать'% {DOCUMENT_ROOT} 'плюс некоторую статическую строку ... Я исследуйте это далее ... – Josh

ответ

5

В зависимости от требуемой информации вы можете может иметь возможность сделать это с помощью RewriteRule. Например:

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

установит PHP вар $_SERVER['RESOURCE_ROOT'] или $_SERVER['REDIRECT_RESOURCE_ROOT'] к вашему Apache Document Root. См. the mod_rewrite manual для получения более подробной информации, но некоторые комбинации из %{DOCUMENT_ROOT}, %{PATH_INFO} и %{REQUEST_FILENAME} могут работать на вас.

Я не думаю, что файл .htaccess может узнать, в каком каталоге он находится. Поэтому я думаю, вам нужно будет использовать жестко установленные пути в вашем файле .htaccess. Например:

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

Насколько я могу судить, setEnv не имеет доступа к переменным окружения apache. Таким образом,% {DIRECTORY} не будет работать, если вы не хотите, чтобы значение было конкретно «% {DIRECTORY}». Использование mod_rewrite, это работает для меня, чтобы получить путь файла, загружаемого:

RewriteEngine On 

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

выходы:

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

Кроме того, есть что-то не так с только с помощью PHP и делать dirname(__FILE__) или dirname($_SERVER['PHP_SELF']) ?

+0

СПАСИБО! Это ОЧЕНЬ близко к тому, что я прошу, но я не прошу указать каталог, в котором находится скрипт. Я прошу указать каталог, в котором находится .htaccess. (Посмотрите на пути и вывод в вопросе немного ближе, чтобы понять, что я имею в виду.) –

+1

@ NathanJ.Brauer AFAIK вы не можете узнать, какой файл .htaccess загружается без использования php и просто идти по пути, пока не найдете файл .htaccess. –

2

Вы можете использовать функцию apache_getenv, чтобы получить то, что вы хотите.

Ссылка: http://php.net/manual/en/function.apache-getenv.php

Не забудьте прочитать документацию:

Эта функция требует Apache 2 в противном случае это не определено.

Пример:

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

Приведенный выше пример будет что-то подобное:

42.24.42.240 

Но, как это было предложено в этой угрозы, вы могли бы просто использовать dirname(__FILE__) и поскольку PHP 5.3.0 вы можете использовать __DIR__ как волшебную константу.

Смежные вопросы