2010-09-02 206 views
4

我需要的是这样的:使用自定义的环境变量

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。