在Apache的httpd.conf中%(百分号)做了什么?

时间:2015-02-03 02:27:49

标签: apache

好的,我在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}。有什么区别?

1 个答案:

答案 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} - 虽然我认为:应该明确这一点吗?)