<If true>块中的Apache配置RewriteRule未执行

问题描述 投票:0回答:1

我正在自定义 Apache httpd (2.4.59) 的配置。这是一个谜题:

如果无条件则执行此规则:

RewriteRule ^/abc/.* /myscript.php [L]

但是如果这样编码,则规则不会执行:

<If true>
    Header always set Test "executed"
    RewriteRule ^/abc/.* /myscript.php [L]
</If>

测试标头已发送,但对于匹配 ^/abc/.* 的 URL,myscript.php 永远不会执行。

发生什么事了?

仅供参考,我正在以真实条件进行

<If>
,而不是
<If true>
。但当我测试
<If true>
时,我意识到 RewriteRule 无论如何都不会执行。

apache mod-rewrite config
1个回答
0
投票

这是对 RewriteRule 的“修复” - 从模式中删除 ^:

<If true>
    Header always set Test "executed"
    RewriteRule /?abc/?.* /myscript.php [L]
</If>

解释

  • 我添加了
    LogLevel alert rewrite:trace6
  • 日志显示
    <If>
    块是最后处理的,在所有其他 RewriteRule 之后,包括那些位于
    <If>
    块下方的规则。
    <If>
    被记录为“[*perdir *If/]”(?)
  • 与其他规则不同,
    <If>
    内的规则模式应用于每个传入 URL 的目标文件的绝对路径
  • 因此使用^,而不输入绝对路径,无法匹配。
  • 为了更精确的匹配,
    <If>
    内的模式可以包含绝对路径。
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.