好的,我在http://httpd.apache.org/docs/2.0/misc/rewriteguide.html看到了以下示例。 %{
和}
是否使Apache将这两个分隔符之间的字符串解释为Apache变量?这个功能记录在哪里?
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteCond %{HTTP_HOST} !^$
RewriteCond %{SERVER_PORT} !^80$
RewriteRule ^/?(.*) http://www.example.com:%{SERVER_PORT}/$1 [L,R,NE]
然后,http://httpd.apache.org/docs/2.2/configuring.html将shell变量描述为${ENVVAR}
。有什么区别?
答案 0 :(得分:2)
%{NAME_OF_VARIABLE}
语法(不仅仅是%
符号)只是mod_rewrite用于访问预定义服务器变量列表(specific to mod_rewrite)之一的机制。正如RewriteCond
directive所述。
如果没有括号%{
.. }
,则NAME_OF_VARIABLE
会被视为文字字符串。
要在mod_rewrite中访问环境变量,请使用以下语法:%{ENV:variable}
。 (另一种语法${ENVVAR}
似乎也适用于此,但如果ENVVAR
不存在则行为存在差异。如果ENVAR
不存在,则${ENVVAR}
将返回文字字符串“$ {ENVAR}”,而%{ENV:ENVAR}
返回一个空字符串。如果您在RewriteCond
中使用重写映射,那么可能也会发生冲突,因为类似的语法是使用。即${mapname:key|default}
- 虽然我认为:
应该明确这一点吗?)