【问题标题】:400 Bad Request not finding defined 404 error page400 Bad Request 未找到定义的 404 错误页面
【发布时间】:2017-10-01 22:36:00
【问题描述】:

如果我为我的一个网站输入错误的 URL 并故意拉出 400 Bad Request,我会收到以下消息:

错误请求

您的浏览器发送了一个此服务器无法理解的请求。 此外,在尝试 使用 ErrorDocument 来处理请求。

这是标准和预期的,除了我有一个 404 页面设置并使用 .htaccess 定义:

ErrorDocument 400 http://www.mywebsite.com/error
ErrorDocument 403 http://www.mywebsite.com/error
ErrorDocument 404 http://www.mywebsite.com/error

为什么浏览器无法识别 400 错误?

输入不存在的 URL 时,我的 404 页面正常工作。

【问题讨论】:

    标签: .htaccess


    【解决方案1】:
    ErrorDocument 404 http://www.mywebsite.com/error
    

    您不应使用绝对 URL 定义您的 ErrorDocument 指令。这样做会触发外部 3xx 重定向到错误文档,而不是内部子请求(推荐)。通过触发外部重定向,您将丢失与触发错误的文档相关的所有服务器变量(状态代码、请求的 URL 等)。

    但是,这可能与您当前的查询相关,也可能不相关。

    您的.htaccess 文件中是否有允许无条件访问您的错误文档的例外情况?

    【讨论】:

      【解决方案2】:

      假设您在根目录中有错误页面。
      如果您在 php/html 中查看此内容,并且您有条件不在 url 中显示文件扩展名,那么您的 .htaccess 应该如下所示。

      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME}.php -f
      RewriteRule ^(.*)$ $1.php [L]
      RewriteCond %{REQUEST_FILENAME}.html -f
      RewriteRule ^(.*)$ $1.html [L]
      ErrorDocument 404 http://www.mywebsite.com/error
      

      (或)

      RewriteEngine on
      RewriteCond %{REQUEST_FILENAME}.php -f
      RewriteRule ^(.*)$ $1.php [L]
      RewriteCond %{REQUEST_FILENAME}.html -f
      RewriteRule ^(.*)$ $1.html [L]
      ErrorDocument 404 http://www.mywebsite.com/error.php(error.html)
      

      否则,如果您在 url 中显示文件扩展名,那么它应该如下所示

      ErrorDocument 404 http://www.mywebsite.com/error.File Extension 
      Example php error file: ErrorDocument 404 http://www.mywebsite.com/error.php 
      

      如果问题已解决,请告诉我并接受我的回答。

      【讨论】:

        猜你喜欢
        • 2019-03-19
        • 2015-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-15
        • 1970-01-01
        • 2015-06-22
        • 2012-01-18
        相关资源
        最近更新 更多