2010-09-02 3 views
4

мне нужно что-то вроде этого:Использование переменных пользовательской среды в .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} не определен.

ответ

4

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

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

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

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

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

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

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