Использование пользовательских переменных среды в .htaccess - PullRequest
4 голосов
/ 02 сентября 2010

Мне нужно что-то подобное:

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 ]

4 голосов
/ 02 сентября 2010

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

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

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

RewriteCond %{HTTP_HOST}#%{ENV:foo} ^([^#]+)#\1$
1 голос
/ 21 июня 2013

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

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

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

...