Простое условие, которое никогда не соответствует и не устанавливает переменную:
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