【问题标题】:What does % (percent sign) do in Apache's httpd.conf?%(百分号)在 Apache 的 httpd.conf 中有什么作用?
【发布时间】:2015-04-02 03:26:58
【问题描述】:

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

【问题讨论】:

  • 如果您投反对票或关闭,请提供评论。
  • 感谢他或她推翻了之前的投票。虽然答案对所有知道的人来说似乎都是显而易见的,但似乎并不容易找到解决方案。感谢您提前提供任何帮助。

标签: apache mod-rewrite


【解决方案1】:

%{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} - 虽然我认为: 应该明确吗?)

【讨论】:

    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 2023-03-16
    • 2013-04-20
    • 2012-11-19
    • 2011-05-06
    • 2012-09-02
    • 2014-05-15
    相关资源
    最近更新 更多