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

时间:2016-11-22 05:58:20

标签: apache .htaccess mod-rewrite url-rewriting httpd.conf

Darn花了一段时间追踪这个怪癖。我在httpd.conf中定义了全局重写规则(或在包含中;赢得了不同之处),强制对某些网址模式进行外部重定向:

<Directory "/home/*">
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^.*wrong\.php$ http://example.net/void.html [R,L]
    </IfModule>
</Directory>

对于没有使用mod_rewrite的.htaccess文件的虚拟主机,这非常有用。但是,如果vhost完全使用任何mod_rewrite规则,则上述操作无效。即使只是RewriteEngine on,没有指定任何规则,也足以取消vhost的httpd.conf规则。这是预期的行为吗?在Apache / 2.2.15上。我曾尝试使用和不使用R&amp; 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或其自身作为唯一一行),肯定不匹配,但足以取消之前定义的所有内容。

1 个答案:

答案 0 :(得分:1)

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

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

此外:

  

从父作用域继承的规则将在规则之后应用   在子范围中指定。