补充一点,它需要一段时间才能跟踪这个问题。我在httpd.conf
定义的全局重写规则(或者在包括;不会有所作为),迫使某些URL模式的外部重定向:如果.htaccess使用mod_rewrite,Apache httpd.conf将取消mod_rewrite
<Directory "/home/*">
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^.*wrong\.php$ http://example.net/void.html [R,L]
</IfModule>
</Directory>
这个工程的辉煌那并不是任何虚拟主机t有一个使用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',我没有太多的帮助你。 – Walf
那肯定没有发生,所以我认为它被取消了。 '.htaccess'中没有后续的匹配规则。就像我说的那样,即使仅仅是“RewriteEngine on”,作为“.htaccess”文件中的唯一东西,也足以使它不会发生。如果我将它注释掉,那么'httpd.conf'规则就像预期的那样匹配。在几个域中测试了相同的模式。另外,在'* .conf'文件中没有其他的mod_rewrite被使用,所以对于我来说触发这种行为是个谜。 –
我可以证实你并不疯狂:),它真的表现如此,即使在2.4.6 –