尽管 VirtualHost 具有“AllowOverride All”,.htaccess 仍会被忽略

尽管 VirtualHost 具有“AllowOverride All”,.htaccess 仍会被忽略

我在 Fedora 13 上运行一个 LAMP 服务器,它运行良好;但是,我刚刚在我当前站点的 docroot 文件夹中添加了一个“.htaccess”文件,但它被完全忽略了。

我尝试了六种不同的测试,包括这个:

RewriteEngine on
RewriteBase /

RewriteRule ^.*$ index.php

但是图像和所有其他页面都可以正常加载,而不存在的文件仍然为 404。我也尝试过这个:

order deny,allow
deny from all

但每个页面仍能正常加载。.htaccess 文件再次被完全忽略。

我们将虚拟主机记录放在 /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我的配置文件中的所有其他指令都被忽略了!

是什么赋予了??

答案1

难以置信。还记得我说过这是一台开发服务器吗?是的……好吧,我的虚拟主机条目实际上如下所示:

<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 指令。是基于匹配的 —— 这意味着如果它与传入请求匹配,它就会应用规则,否则,它并不关心你是否告诉它在 magic unicorns 上允许覆盖。

让这成为其他寻求帮助的人的一个教训——当所有其他方法都失败时,请考虑万能的 Typo。

答案2

检查虚拟主机声明上方的“httpd.conf”中是否存在任何其他“AllowOverride None”。很可能,您在 docroot 中存在“AllowOverride None”。

答案3

我在一台新服务器上遇到了这个问题,最终意识到 mod-rewrite 默认并未启用。

ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load

答案4

就我而言,apache 用户无法读取 .htaccess 文件。

我解决了

chown ubuntu:www-data .htaccess
chmod 750 .htaccess

相关内容