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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

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