.htaccess 不起作用但已启用

.htaccess 不起作用但已启用

我有一个 .htaccess 文件无法正常工作。我知道它无法正常工作,因为我在其中写入了随机内容,但我没有收到 500 错误。即使我编写了正确的代码,它也无法正常工作。我已验证它位于我的根目录中,并且具有正确的文件名。这是来自 http.conf 的目录“标签”:

<Directory />
Options FollowSymLinks
AllowOverride All
Order deny,allow
Deny from all
</Directory>

我使用<?php phpinfo(); ?>并验证了 mod_rewrite 已启用,但仍然没有运气。

答案1

我想知道这Deny from all是否是问题所在。如果 Apache 知道它将发送 403 响应,它甚至可能不会去读取 .htaccess 文件。

其他潜在问题可能包括文件名称中的拼写错误.htaccess(尽管您确实说过您已经检查过这个问题)、AccessFileName与正常值不同的值以及对任何通向 DocumentRoot 的目录的文件/目录权限。

可能值得使用 strace 来验证 Apache 是否确实在读取您的.htaccess文件。确保 Apache 已停止,然后按以下方式启动它:

sudo strace -f -e open apache2 -X

然后再次提出您的请求。

答案2

<Directory />
Options FollowSymLinks
AllowOverride All

您永远不应该AllowOverride All为整个文件系统(即<Directory />容器内)设置。这应该是(并且默认是)AllowOverride None有原因的。Apache 明确警告不要这样做。

在此处设置将导致 Apache沿着目录树一直AllowOverride All扫描到根目录的文件。.htaccess

.htaccess您的文件未被处理的最可能原因是您有更多具体的 <Directory>容器(可能在<VirtualHost>)在已设置的配置的其他地方,覆盖该目录树的AllowOverride None设置。<Directory />

但是,通过设置,AllowOverride AllApache<Directory />很可能扫描.htaccess所有父母可能会导致性能和安全问题的目录。

<Directory />
:
Deny from all

由于您的网站大概可以访问,所以您一定在某处有一个更具体的<Directory>容器?(我假设您没有收到“403 Forbidden”响应?)

相关内容