我正在自定义 Apache httpd (2.4.59) 的配置。这里有一个难题:
如果无条件,此规则将重写匹配的 URI:
RewriteRule ^/abc/.* /myscript.php [L]
但是如果这样编码,规则就不会重写,也不会对相同的 URI 产生任何影响:
<If true>
Header always set Test "executed"
RewriteRule ^/abc/.* /myscript.php [L]
</If>
测试标头已发送,但对于与 ^/abc/.* 匹配的 URI,myscript.php 从未执行。
到底是怎么回事?
仅供参考,我正在处理<If>
真实情况,而不是<If true>
。但是当我测试时<If true>
,我意识到 RewriteRule 永远不会执行。
以下是对 RewriteRule 的“修复” - 从模式中删除 ^:
解释
LogLevel alert rewrite:trace6
。<If>
块是最后处理的,排在所有其他 RewriteRule 之后,包括<If>
块下面的 RewriteRule。日志<If>
记录为“[*perdir *If/]”(?)<If>
应用于每个传入 URL 的目标文件的绝对路径。<If>
可以包含绝对路径。