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

use*_*531 7 apache

好的,我从http://httpd.apache.org/docs/2.0/misc/rewriteguide.html看到以下示例。是否%{和}使得Apache的解释这两个deliminators作为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]
Run Code Online (Sandbox Code Playgroud)

然后,http://httpd.apache.org/docs/2.2/configuring.html将使用 shell 变量描述为${ENVVAR}. 有什么不同?

MrW*_*ite 5

该%{NAME_OF_VARIABLE}语法(不是单纯的%符号)是根本的mod_rewrite的访问的预定义列表中的一个机制服务器变量(具体到mod_rewrite的)。正如该RewriteCond指令所记录的那样。

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

要在 mod_rewrite 中访问环境变量,请使用以下语法:%{ENV:variable}. (另一种语法${ENVVAR}似乎也可以在这里工作,但是,如果ENVVAR不存在,则行为有所不同。如果ENVAR不存在,则${ENVVAR}返回文字字符串“${ENVAR}”,而%{ENV:ENVAR}返回空字符串。也可能有一个RewriteCond由于使用了类似的语法,如果您正在使用重写映射,则会发生冲突。即${mapname:key|default}- 尽管我认为这:应该使这一点明确?)