重定向至自定义 404 页面在本地主机 (Apache) 上不起作用



我有一个.htaccess-文件,它具有下面列出的指令。前三行用于为403、404和429提供自定义错误页面。

ErrorDocument 404 /404.php
ErrorDocument 403 /403.php
ErrorDocument 429 /429.php
DirectoryIndex maintenance.html index.php index.html index.htm home.html 
#Rewrite everything to https
<If "%{HTTP_HOST} != 'localhost'">
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</If>
<Else>
# local configuration 
# nothing special here...
</Else>

当我发布到我的网站时,这工作得很好。当试图打开一个不存在的页面,如mysite.com/wrongpage.php,自定义404.php页面显示。

但是当我尝试在进入localhost/wrongpage.php时在本地主机上做同样的事情时。它只是显示浏览器默认的404消息。404.php页存在,但未按预期使用。

我不是很擅长如何使用.htaccess文件,但也许你可以帮助我理解为什么它不会在本地主机上工作?

这表明您没有在本地开发服务器上启用.htaccess覆盖。.htaccess文件基本上是禁用的,所以指令没有做任何事情。

您需要在服务器配置(或<VirtualHost>容器)中适当的<Directory>容器中设置AllowOverride指令。通过"appropriate"我指的是针对文档根目录的特定<Directory>容器,而不是整个服务器(应该保留AllowOverride None)。

例如:

<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/html
<Directory /var/www/html>
Require all granted
# Enable .htaccess overrides
AllowOverride All
</Directory>
</VirtualHost>

重新启动Apache。

参考:

  • https://httpd.apache.org/docs/2.4/mod/core.html allowoverride

最新更新