Использование пользовательских переменных среды в.htaccess

Мне нужно что-то вроде этого:

SetEnv foo bar.baz
RewriteEngine On

RewriteCond %{HTTP_HOST} ^%{foo}$
RewriteRule ^(.*)$ http://www.foo/$1 [L]

UPD:

Я сделал следующее:

SetEnv HOSTNAME_ENV testsite
RewriteEngine On
RewriteCond %{HTTP_HOST} ^%{ENV:HOSTNAME_ENV}
RewriteRule ^(.*)$ http://www.%{ENV:HOSTNAME_ENV}/$1 [L,R=301]

Но это не работает. %{ENV:HOSTNAME_ENV} не определено.

2 ответа

Это не сработает, потому что mod_rewrite не расширяет переменные в тестовых шаблонах. Следовательно, ваше выражение будет пытаться соответствовать регулярному выражению ^%{foo}$ не ^value_of_foo$,

Кроме того, документация для SetEnvтакже особо отмечает порядок обработки по отношению к mod_rewrite, Это действительно вступает в действие здесь, несмотря на то, что правила применяются позже при обработке запроса, чем сценарий, который они там описывают. Если вы не выполнили перезапись, которая вызывает внутреннее перенаправление, перед проверкой по заданной вами переменной среды, она будет пустой.

Предполагая, что вы устанавливаете переменную правильно, потенциальный обходной путь должен сделать это, хотя я чувствую, что это не надежно:

RewriteCond %{HTTP_HOST}#%{ENV:foo} ^([^#]+)#\1$

Просто установите среду, используя правила переписывания:

RewriteRule (.*) $1 [E=HOSTNAME_ENV:whatever.com]

Это также имеет то преимущество, что вы можете использовать RewriteCond.

Другие вопросы по тегам