Можно ли декодировать переменную 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]
Другие вопросы по тегам