%(百分号)在 Apache 的 httpd.conf 中有什么作用?

What does % (percent sign) do in Apache's httpd.conf?

好的,我从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}/ [L,R,NE]

然后,http://httpd.apache.org/docs/2.2/configuring.html描述使用shell个变量作为${ENVVAR}。有什么区别?

%{NAME_OF_VARIABLE} 语法(不仅仅是 % 符号)只是 mod_rewrite 访问预定义的 服务器变量列表之一的机制 (specific to mod_rewrite). As documented for the RewriteCond directive.

没有封闭的 %{..} 然后 NAME_OF_VARIABLE 被视为文字字符串。

要访问 mod_rewrite 中的 环境变量 ,您可以使用语法:%{ENV:variable}。 (其他语法 ${ENVVAR} 似乎也适用于此,但是,如果 ENVVAR 不存在,则行为会有所不同。如果 ENVAR 不存在,则 ${ENVVAR} returns 文字字符串“${ENVAR}”,而 %{ENV:ENVAR} returns 空字符串。如果您使用重写映射, 可能 也会发生冲突在 RewriteCond 中,因为使用了类似的语法。即 ${mapname:key|default} - 虽然我认为 : 应该使它明确无误?)