Назад | Перейти на главную страницу

Apache SetEnvIf не соответствует Request_Uri

Простое условие, которое никогда не соответствует и не устанавливает переменную:

SetEnvIf Request_URI "^/path/to/something*" access_granted

Проверка URI с помощью PHP дает правильную строку, однако переменная никогда не устанавливается.

echo getenv('Request_URI'); --> /path/to/something
echo getenv('access_granted'); --> <<empty>>

Все просто, но все же и всегда не соответствует.

Обновить: Интересный момент в том, что я могу достичь access_granted = 1 по строке:

SetEnvIf Request_URI "^/path/*" access_granted

/path тоже RewriteBase - может это как-то связано, не знаю

Проблема, с которой вы столкнулись, может быть вызвана mod_rewrite, как описано под. Правила перезаписи применяются перед применением setenv, так что ему передается переписанный uri запроса. Попробуйте установить переменную env при перезаписи.

Второй аргумент SetEnvIf предполагается, что это регулярное выражение, поэтому оно должно читаться как:

SetEnvIf Request_URI ^/path/to/something.* access_granted

ваша вторая попытка:

 SetEnvIf Request_URI "^/path/*" access_granted

работает, потому что у вас действительно 0 или более символов "/" после /path

Другими словами, вы пытались использовать глобусы оболочки там, где ожидается регулярное выражение.

Простое решение. Request_URI не является именем переменной среды, вы устанавливаете переменную с именем access_granted.

Я знаю, что это старая тема, но я наткнулся на нее в своем текущем исследовании, возможно, у других будут связанные проблемы ...

Для меня следующий код работал нормально, и выражение было сопоставлено после перезаписи!

URL: www.example.de/lockthissite/

.htaccess код:

SetEnvIfNoCase Request_URI ^/lockthissite/$ SECURED=yes

AuthType Basic 
AuthName "restricted access" 
AuthUserFile /path/to/my/.htpasswd 
Require valid-user 
Satisfy any 
Order allow,deny 
Allow from all
Deny from env=SECURED