如果.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