Как я могу определить переменную в файле .htaccess и использовать ее?
Я определил файл 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
.
В чем проблема в моих кодах и как я могу это решить?
Ответы
Ответ 1
Вы не можете использовать SetEnv
таким образом, потому что он еще не обработан.
Внутренние переменные среды, заданные этой директивой, устанавливаются после запускаются самые ранние директивы обработки запроса, такие как доступ управление и сопоставление URI-to-filename. Если переменная окружения вы настраиваетесь как вход в этот ранний этап обработки таких как директива RewriteRule, вместо этого вы должны установить переменная среды с помощью SetEnvIf.
То, что вы ищете, это setenvif
вместо SetEnv
Итак, вы должны сделать что-то вроде
SetEnvIf Request_URI "^.*" base_path=/cig/base3
http://httpd.apache.org/docs/2.2/mod/mod_setenvif.html#setenvif