Можно ли декодировать переменную Apache SetEnvIf Request_URI в контексте конфигурации виртуального хоста и / или сервера?
Когда следующие
SetEnvIf
директива находится в разделе каталога виртуального хоста или в
.htaccess
подать
Request_URI
переменная декодируется в процентах. Но когда его нет в
directory
раздел или
.htaccess
файл (то есть контекст конфигурации виртуального хоста или сервера) он не декодируется (он остается закодированным в процентах).
Что контролирует / определяет эту разницу? Я предполагаю, что это побочный продукт обхода дерева каталогов файловой системы. Поскольку путь файловой системы не закодирован в процентах.
Настраивается ли это так, чтобы
Request_URI
Apache
SetEnvIf
переменная также в процентах декодируется в контексте конфигурации виртуального хоста и / или сервера?
SetEnvIf Request_URI "^.*access_logger/counters/(.*)\.gif$" Page_Name_File_Name=$1 log_file log_sql_db validate_cache
Apache / 2.4.6 (CentOS)
2 апр.2020 г. 13:13:23
1 ответ
Я предполагаю, что это побочный продукт обхода дерева каталогов файловой системы.
Это разумное "предположение", поскольку директивы в контексте сервера / виртуального хоста обрабатываются до того, как запрос будет отображен в файловую систему.
Однако то же самое не относится к
REQUEST_URI
(то же имя, но другое) переменная сервера, используемая в выражениях mod_rewrite и Apache. Это всегда %-декодируется, независимо от того, в каком контексте оно используется. То же самое относится к URL-пути, соответствующему
RewriteRule
директива, которая всегда%-декодируется, независимо от контекста.
Настраивается ли это таким образом, чтобы переменная Request_URI Apache SetEnvIf также в процентах декодировалась в контексте конфигурации виртуального хоста и / или сервера?
Не то чтобы я в курсе. Казалось бы, это "особенность" mod_setenvif. (Возможно, из-за конкретных этапов обработки модуля?)
Однако вы можете использовать mod_rewrite, чтобы вместо этого установить переменную среды (или также). Например:
RewriteEngine On
RewriteRule access_logger/counters(.*)\.gif$ - [E=Page_Name_File_Name:$1]
В
^.*
префикс в регулярном выражении в этом случае не нужен.
Чтобы установить все переменные среды, как в оригинале
SetEnvIf
директиве, вам необходимо явно установить для остальных варов значение
1
. Например:
RewriteRule access_logger/counters(.*)\.gif$ - [E=Page_Name_File_Name:$1,E=log_file:1,E=log_sql_db:1,E=validate_cache:1]