使用自定义的环境变量
问题描述:
我需要的是这样的:使用自定义的环境变量
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}未定义。
答
这不起作用,因为mod_rewrite
不会扩展测试模式中的变量。因此,您的表情会尝试匹配正则表达式^%{foo}$
,而不是^value_of_foo$
。
另外,SetEnv
的文档还对与mod_rewrite
有关的处理顺序做了特别说明。实际上这确实起到了作用,尽管规则在请求处理中稍后应用,而不是他们在那里描述的场景。如果在针对您设置的环境变量进行测试之前,您没有执行重写导致内部重定向,则它将为空。
假设你正确设置变量,一个潜在的解决方法是要做到这一点,但我觉得它不是万无一失:
RewriteCond %{HTTP_HOST}#%{ENV:foo} ^([^#]+)#\1$
答
刚刚成立的环境中使用重写规则:
RewriteRule (.*) $1 [E=HOSTNAME_ENV:whatever.com]
这也有好处,你可以使用RewriteCond。