Когда следующие 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
Я предполагаю, что это побочный продукт обхода дерева каталогов файловой системы.
Это разумное «предположение», поскольку директивы в контексте сервера / виртуального хоста обрабатываются до того, как запрос будет отображен в файловую систему.
Однако то же самое не относится к 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]