Apache中的自定义404错误问题 - ErrorDocument也是404

27

我想为我的网站创建一个自定义的404错误页面。我正在使用Windows上的XAMPP进行测试。

我的目录结构如下:

error\404page.html
index.php
.htaccess

我的 .htaccess 文件的内容是:

ErrorDocument 404 error\404page.html

这将产生以下结果:

alt text

但是它并没有起作用——是斜杠的方式还是我应该如何引用错误文档的问题?

如果网站文档位于Web根文件夹的子文件夹中,那么我应该如何引用?

当我把文件改成:

ErrorDocument 404 /error/404page.html

我收到了以下错误信息,它与我链接的HTML文件中的内容不同-但它与上面列出的内容也不同:

alt text


2
你尝试将斜杠改为正斜杠了吗?不确定Apache是否支持反斜杠。 - Karel Petranek
ErrorDocument 404 /error/404page.html现在的情况是这样,它会抛出404异常 - 然而这不是我链接的html文件中的异常。 - Malachi
4个回答

61

ErrorDocument指令在提供本地URL路径时,期望该路径从DocumentRoot完全限定。在您的情况下,这意味着ErrorDocument的实际路径为:

ErrorDocument 404 /JinPortfolio/error/404page.html
当你在第二次尝试中进行了更正后,你看到的原因是因为http://localhost/error/404page.html不存在,因此出现了关于找不到错误处理文档的404错误的信息。

只需在htaccess中声明它吗?我收到了服务器错误消息! - Hendry Tanaka

11

由于性能问题,Apache现在默认禁用.htaccess文件。当启用.htaccess文件时,Web服务器必须在其所在的每个子目录中的每个请求中检查它。

需要注意的是,如果您仍想启用.htaccess文件,这里有一个链接解释如何操作:

http://www.tildemark.com/enable-htaccess-on-apache/


6

你可以将这些规则添加到任何虚拟主机文件中,而不是将它们添加到你的 .htaccess 文件中。

<VirtualHost *:80>

    DocumentRoot /var/www/mywebsite

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    ErrorDocument 404 /error-pages/404.html
    ErrorDocument 500 /error-pages/500.html
    ErrorDocument 503 /error-pages/503.html
    ErrorDocument 504 /error-pages/504.html

</VirtualHost>

error-pagesmywebsite 文件夹中的一个子文件夹,包含自定义错误页面。确保重新启动 Apache 以查看更改。

$sudo /etc/init.d/apache2 reload

1
无论您输入的默认404页面的URL是绝对路径还是相对于根文件夹的路径,都必须正确:这就是为什么有些人会错误地将其URL视为重写引擎的URL,而后者是相对于.htaccess所在的文件夹的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接