Я определил файл htaccess для моего сайта, имеющего этот код:
RewriteEngine on RewriteBase / RewriteRule ^bit_auth\/?(.*)$ /cig/base3/auth/$1 [R=301,NC,L] RewriteCond $1 !^(index\.php|images|robots\.txt|assets|themes|includes) RewriteRule ^(.*)$ /cig/base3/index.php/$1 [L]
Я хочу сохранить корневой путь моего сайта в переменной следующим образом:
RewriteEngine on RewriteBase / SetEnv BASE_PATH "/cig/base3" RewriteRule ^bit_auth\/?(.*)$ %{ENV:BASE_PATH}/auth/$1 [R=301,NC,L] RewriteCond $1 !^(index\.php|images|robots\.txt|assets|themes|includes) RewriteRule ^(.*)$ %{ENV:BASE_PATH}/index.php/$1 [L]
потому что мне, возможно, придется использовать значение BASE_PATH
в более кодах позже, а также его можно изменить, и я не хочу каждый раз искать и заменять свой файл htaccess. Но когда я использую код выше, в файле htaccess %{ENV:BASE_PATH}
возвращает пустое значение, а не ожидаемое /cig/base3
но в php, когда я его вызываю, используя:
<?php $specialPath = getenv('BASE_PATH'); var_dump($specialPath)?>
он показывает правильное значение /cig/base3
.
В чем проблема в моих кодах и как я могу это решить?
Вы не можете использовать SetEnv
таким образом, потому что он еще не обработан.
Переменные внутренней среды, заданные этой директивой, устанавливаются после запуска большинства ранних директив обработки запросов, таких как управление доступом и сопоставление URI-к-имени файла. Если переменная среды, которую вы устанавливаете, подразумевается как вход в эту раннюю фазу обработки, такую как директива RewriteRule, вместо этого вы должны установить переменную окружения с помощью SetEnvIf.
То, что вы ищете, это setenvif
вместо SetEnv
Поэтому вы должны быть способны сделать что-то вроде
SetEnvIf Request_URI "^.*" base_path=/cig/base3
http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif