如果.htaccess使用mod_重写,则Apache httpd.conf mod_重写已取消

如果.htaccess使用mod_重写,则Apache httpd.conf mod_重写已取消,apache,.htaccess,mod-rewrite,url-rewriting,httpd.conf,Apache,.htaccess,Mod Rewrite,Url Rewriting,Httpd.conf,该死,追踪这一怪癖花了一段时间。我在httpd.conf中定义了全局重写规则(或者在include中定义了全局重写规则;不会有什么区别),以强制对某些URL模式进行外部重定向: <Directory "/home/*"> <IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^.*wrong\.php$ http://example.net/void.html [R,L]

该死,追踪这一怪癖花了一段时间。我在
httpd.conf
中定义了全局重写规则(或者在include中定义了全局重写规则;不会有什么区别),以强制对某些URL模式进行外部重定向:

<Directory "/home/*">
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteRule ^.*wrong\.php$ http://example.net/void.html [R,L]
    </IfModule>
</Directory>
甚至只是那样而已。当
.htaccess
启动时,似乎任何早期的
mod_rewrite
都会被删除,并启动一个新的干净规则集,足以使规则不匹配。另外,与
mod_rewrite
有关的任何其他行都会导致相同的结果。如果我坚持使用
.htaccess
例如
RewriteRule^([X-Z])heRmaGerd[1-3]\.FOObAR$/where/$1
(如果
RewriteEngine处于启用状态,或者仅以其自身作为唯一一行),它肯定不会匹配,但足以抵消之前定义的所有内容。

看起来像这样(至少在2.4.6上)
RewriteOptions继承的帮助,可以放在
httpd.conf
.htaccess

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

此外:

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


你确定要取消吗?或者是你有一个与新请求相匹配的规则?后者似乎更有可能,但如果没有你的
.htaccess
,我就帮不了你多少忙了。好吧,这肯定不会发生,所以我想它已经取消了。
.htaccess
中没有以后的匹配规则。正如我所说,即使仅仅是一个“RewriteEngine on”(作为
.htaccess
文件中的唯一内容),也足以让它不发生。如果我将其注释掉,则
httpd.conf
规则与预期匹配。在多个域中测试相同的模式。另外,在
*.conf
文件中没有其他mod_rewrite用法,所以触发这种行为对我来说是个谜。我可以确认你没有发疯:),它的行为确实如此,即使在2.4.6Brilliant上,这也解决了它。但是,我看到声明
重写选项继承
必须进入子
.htaccess
,在父上下文中声明它(无论如何在
httpd.conf
中)没有效果。似乎是2.2.x上的唯一方法(这是我在CentOS上所能得到的)。哦,我能处理的代码复制太多了!好久不见了,
wp login.php
xmlrpc.php
之类的邪恶搜索者!所有的httpd错误日志都让我抓狂,很难从大量的垃圾中发现任何实际的错误。
RewriteEngine on