【发布时间】:2017-04-05 17:02:51
【问题描述】:
该死的跟踪这个怪癖花了一些时间。我在httpd.conf 中定义了全局重写规则(或在包含中;不会产生影响),以强制对某些 URL 模式进行外部重定向:
<Directory "/home/*">
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^.*wrong\.php$ http://example.net/void.html [R,L]
</IfModule>
</Directory>
这对于没有使用 mod_rewrite 的 .htaccess 文件的任何虚拟主机都非常有效。但是,如果虚拟主机使用任何 mod_rewrite 规则,则上述方法不起作用。即使只是RewriteEngine on,没有指定任何规则,也足以取消虚拟主机的httpd.conf 规则。这是预期的行为吗?在 Apache/2.2.15 上。我尝试过使用和不使用 R & L 标志,使用和不使用 <Directory> 包装,并在虚拟主机之前或之后声明,但这些规则根本不起作用。
有人拯救我的理智,告诉我如何在httpd.conf 和.htaccess 中拥有(不冲突的)规则一起工作。这一定是可能的,我希望它是默认行为?
编辑:根据要求,.htaccess 文件示例:=^_^=
RewriteEngine on
即使只是那个,也只有那个。足以使规则不匹配,似乎任何早期的mod_rewrite 都被清除了,并且在.htaccess 启动时开始了新的干净规则集。此外,与mod_rewrite 相关的任何其他行都会导致相同的结果。如果我坚持使用.htaccess,例如RewriteRule ^([X-Z])heRmaGerd[1-3]\.FOObAR$ /wherever/$1(以RewriteEngine on,或单独作为唯一行),它肯定不会匹配,但足以抵消之前定义的所有内容。
【问题讨论】:
-
你确定它被取消了吗?还是您有与新请求匹配的规则?后者似乎更有可能,但没有你的
.htaccess,我无能为力。 -
嗯,它肯定不会发生,所以我认为它被取消了。
.htaccess中没有后面的匹配规则。就像我说的,即使只是“RewriteEngine on”,作为.htaccess文件中唯一的东西,也足以让它不会发生。如果我将其注释掉,httpd.conf规则将按预期匹配。跨多个域测试的相同模式。此外,*.conf文件中的任何地方都没有其他 mod_rewrite 使用,所以触发这种行为的原因对我来说是个谜。 -
我可以确认你没有疯 :),它的行为确实如此,即使在 2.4.6 上也是如此
标签: apache .htaccess mod-rewrite url-rewriting httpd.conf