即使VirtualHost具有“ AllowOverride All”,也将忽略.htaccess


25

我在Fedora 13上运行的LAMP服务器运行正常;但是,我只是将“ .htaccess”文件添加到当前站点的docroot文件夹中,而该文件被完全忽略了。

我尝试了六种不同的测试,其中包括:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

但是图像和所有其他页面都可以正常加载,并且不存在的文件仍然是404。我还尝试了以下操作:

order deny,allow
deny from all

但是每个页面仍然可以正常加载。同样,.htaccess文件只是100%被忽略。

我们将虚拟主机记录放在/etc/httpd/conf.d/virtual.conf中。看起来像这样:

NameVirtualHost *

<VirtualHost *>
    ServerName              intranet
    DocumentRoot            /var/www/default
    <Directory "/var/www/default">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

<VirtualHost *>
    ServerName              ourwebsite.com
    DocumentRoot            /var/www/html/ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

还有什么可能导致我们的服务器完全忽略该.htaccess文件?

编辑:

我将.htaccess文件更改为上述内容,以更好地证明我的更改被忽略了。请注意,我在生产服务器上尝试了完全相同的.htaccess文件,并且工作正常。

编辑2:

好的,我有新信息!仅出于测试目的,我经历了并将每个“ AllowOverride”指令临时更改为的过程AllowOverride All。我发现目录的第一个条目似乎压倒了所有其他条目:

<Directory />
    Options FollowSymLinks
    AllowOverride None
</Directory>

当我将其更改AllowOverride All为时,我的.htaccess文件开始生效。就像AllowOverride All我的配置文件中的所有其他指令都被忽略了一样!

是什么赋予了??

Answers:


32

难以置信的。还记得我怎么说这是开发服务器吗?是的..这就是我的虚拟主机条目的真实外观:

<VirtualHost *>
    ServerName              dev.ourwebsite.com
    DocumentRoot            /var/www/html/dev.ourwebsite.com/docroot
    <Directory "/var/www/html/ourwebsite.com/docroot">
        Options FollowSymLinks
        AllowOverride All

        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

你看到了吗?好吧,我没有。我忘记将我的“目录”条目更改为dev.ourwebsite.com而不是ourwebsite.com -一切都不同了。我只是假设如果目录不存在,Apache会抛出一个错误。但这仅适用于DocumentRoot指令。基于匹配-意味着如果它匹配传入的请求,它将应用规则,但是否则,您是否在魔术独角兽上将其告知AllowOverride并不在乎。

让这成为对其他任何人的一个教训-当其他所有方法都失败时,请考虑使用全能的错字。


我在一百万年中从未遇到过这种情况!我在Directory路径中也有错别字,还有一个开发项目...感谢您睁开眼睛。
gillytech

我在目录部分也有错字。真的,这真令人沮丧。幸亏我遇到了这个问题,并且知道我可以犯下超级愚蠢的错误。
Akash Kumar Sharma

我知道已经过去7年了,但我只是想跳进去说这个答案对我有帮助。这是同一类型的东西。我从其他虚拟主机复制了指令,并更改了错误的位。感谢您分享此信息!明智地冲浪。
dolst

5

检查是否在virtualhosts声明上方的“ httpd.conf”中显示了其他任何“ AllowOverride None”。可能在docroot中有“ AllowOverride None”。


我正在使用的服务器是开发服务器,它与我们的生产服务器完全相同。httpd.conf文件实际上是相同的。唯一的不同是,此服务器上的“ virtual.conf”条目较少,每个站点都带有dev.。生产服务器仍然可以正常工作,.htaccess文件的行为完全符合预期,而开发服务器完全忽略了.htaccess文件。
Brian Lacy 2010年

0

三个猜测:

order deny, allow中的逗号后面是否确实有空格.htaccess?Apache不喜欢这样。对于F13的我来说,我得到了500架。

您在AccessFileName任何地方都有指令吗?

如果您使用的是selinux,则文件(ls -lZ)是否具有正确的上下文?


我没有得到500个错误。.htaccess文件将被忽略。而且我确认我那里根本没有空间。我对selinux或上下文一无所知,但是我抬头查看如何检查,显然已禁用。至于AccessFileName,我将环顾四周,但是正如我在对Denis的回答的评论中所说的那样,这两台服务器的apache配置实际上是相同的。
Brian Lacy 2010年

我在空间方面也遇到了问题。这让我发疯。
egorgry 2010年

糟糕,更正:我的httpd.conf中确实有一个AccessFileName指令。内容如下:AccessFileName .htaccess
布赖恩·莱西

0

我在新服务器上安装了该服务器,最终意识到默认情况下未启用mod-rewrite。

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.