如果 .htaccess 使用 mod_rewrite,则 Apache httpd.conf mod_rewrite 取消

Posted

技术标签:

【中文标题】如果 .htaccess 使用 mod_rewrite,则 Apache httpd.conf mod_rewrite 取消【英文标题】:Apache httpd.conf mod_rewrite canceled if .htaccess uses mod_rewrite 【发布时间】: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 标志,使用和不使用 &lt;Directory&gt; 包装,并在虚拟主机之前或之后声明,但这些规则根本不起作用。

有人拯救我的理智,告诉我如何在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 上也是如此 【参考方案1】:

看起来(至少在 2.4.6 上)RewriteOptions inherit 有帮助,放在 httpd.conf.htaccess 中。

根据docs,这应该只强制 VirtualHost 从主服务器配置继承规则,或者在每个目录上下文中继承父目录的 .htaccess 配置,但我测试过,它似乎解决了你的问题。

还有:

从父范围继承的规则在规则之后应用 在子范围内指定。

【讨论】:

太棒了,这解决了。但是,我看到声明 RewriteOptions inherit 必须进入子 .htaccess,在父上下文中声明它(无论如何在 httpd.conf 中)没有效果。似乎是 2.2.x 上的唯一方法(这是我在 CentOS 上所能得到的)。哦,好吧,我可以处理那么多代码复制!久违了,wp-login.phpxmlrpc.php 之类的邪恶寻求者!所有的 httpd 错误日志垃圾都让我发疯了,很难从大量垃圾中发现任何实际错误。

以上是关于如果 .htaccess 使用 mod_rewrite,则 Apache httpd.conf mod_rewrite 取消的主要内容,如果未能解决你的问题,请参考以下文章

如果主机名不是,htaccess 重定向

如果 url 包含使用 htaccess 的特定字符串,则重定向

如果我使用.htaccess mod重写规则,PHP Cookie不可用

.htaccess 重定向,如果 url 中的文件夹名称

如何使用 .htaccess 将错误 404 重定向到主页?

浅谈.htaccess文件--避免滥用.htaccess文件