好的,我在
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}.有什么不同?
最佳答案 %{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} – 虽然我认为:应该使这个毫不含糊?)