X10*_*X10 7 httpd.conf apache-2.2
httpd.conf 中的${var}
和 有什么区别%{var}
?
如何以及何时使用${}
and %{}
?
http://httpd.apache.org/docs/2.4/configuring.html提到:
使用Define of 或shell 环境变量定义的变量值可以使用语法${VAR} 在配置文件行中使用。
http://httpd.apache.org/docs/2.4/mod/mod_rewrite.html提到:
服务器变量:这些是 %{ NAME_OF_VARIABLE } 形式的变量
和
RewriteMap 扩展:这些是 ${mapname:key|default} 形式的扩展。
将${VAR}
在 httpd.conf 中的任何地方使用,除了 mod_rewrite 指令的(如 RewriteCond、RewriteRule 但除了${}
在RewriteRule中使用的 RewriteMap 扩展^/ex/(.*) ${examplemap:$1})
使用SetEnvIf
指令在 httpd.conf 中设置的变量是否会在同一 httpd.conf 中使用,${var}
除非该变量与 mod_rewrite 指令一起使用,该变量将用作%{var}
?
httpd.conf 中的 ${var} 和 %{var} 有什么区别?
几乎所有的东西。没有硬性规定说“$
做 x,%
做 y”,因为它们根据使用地点和方式做不同的事情。
${VAR} 是否会在 httpd.conf 中的任何地方使用,除了 mod_rewrite 指令的
否 -${VAR}
在整个配置中的每个位置都用作替换,即使在与 mod_rewrite 相关的行中也是如此。这些只能在启动时使用-D
传递给 httpd 二进制文件的选项或Define
指令来定义。
之所以可以这样做,是因为这些变量不能包含:
字符,而RewriteMap
用法必须包含:
字符。这允许以$
非常不同的方式使用而没有冲突 - 解析器看到:
并知道它不应该替换它。
使用 SetEnvIf 指令在 httpd.conf 中设置的变量是否会用作 ${var},除非该变量与 mod_rewrite 指令一起使用,其中该变量将用作 %{var}?
不。环境变量与通过-D
or设置的变量不同Define
- 它们是完全独立的每个请求上下文(那些是您设置的SetEnvIf
),只有某些指令会使用。在支持的地方特别提到了它们 - 在 mod_rewrite 中它们是%{ENV:variable}
,在日志中它们是%{variable}e
,并且许多指令都有一个看起来像env=variable
.
所以,基本上;这是一个令人困惑的混乱 - 证明了 Web 服务器在过去几十年的历史。可能让您感到困惑的主要事情是 mod_rewrite 的语法不会以任何方式扩展到配置的任何其他部分;一切都不一样了。从这一切中得出的主要观点是,没有一个管理“规则”使所有这些都有意义——$
一个地方的意思$
与另一个地方的完全不同。
一些方便的参考点:
Define
和${VAR}
替换一次。当您想要在开发和生产环境之间共享配置文件时,这非常有用 - 但不要与$
from的使用混淆RewriteMap
,后者始终包含:
.%{VAR}
,您可以使用 获取“正常”环境变量%{ENV:VAR}
,您可以使用[E=VAR]
. 归档时间: |
|
查看次数: |
4457 次 |
最近记录: |