【问题标题】:Apache .htaccess: ErrorDocument and RewriteEngine not working togetherApache .htaccess:ErrorDocument 和 RewriteEngine 不能一起工作
【发布时间】:2010-03-17 10:50:35
【问题描述】:

请看下面的.htaccess

ErrorDocument 404 /404/

RewriteEngine On
RewriteRule (.*) index.php [L]

通过此设置,我在 PHP 中使用 header('HTTP/1.1 404 Not Found'); 重定向到错误处理页面并发送适当的 HTTP 状态代码。发送了正确的404状态码,但是浏览器显示空白页,访问日志显示"GET /invalid-url/ HTTP/1.1" 404 -

谁能告诉我如何使 ErrorDocument 与 Apache URL 重写一起工作?

【问题讨论】:

    标签: php .htaccess mod-rewrite http-status-code-404


    【解决方案1】:

    是在重写规则后声明 404 文档

    您的服务器不会推送任何 404 错误是正常的,您使用的是包罗万象的正则表达式 ((.*)) 作为唯一的重写规则。

    但您的问题与 htaccess 无关。 在 php 中,如果您发送 404 标头,浏览器将不会自动重定向到 404 页面,但您必须自己在 PHP 中提供错误页面内容,因为大多数具有内部路由系统的框架都会这样做。

    【讨论】:

    • 您好 Benoit,所以您是说仅发送 404 标头不会强制 Apache 在 ErrorDocument URL 处提供内容。如果我从 PHP 提供内容,在设置 404 标头后,我确实会在浏览器中显示 404 页面,但地址栏仍然显示无效 URL,而不是 /404/。再想一想,我想这其实一点也不坏。
    • 您好,您是对的,如果浏览器没有转发到真正的 404 页面 url 似乎也不错。 Apache 也不会使用 ErrorDocument 声明进行重定向。恕我直言,这样更好:搜索引擎爬虫会忘记使用 404 http 响应代码响应的 url,人类会看到一个不错的 404 页面,而不是 apache 的默认页面,或者更糟的是,页面上有错误。
    【解决方案2】:

    我想我的问题的答案是:我不需要。 我试图完成的是“404 重定向”。也就是说,当请求一个无效的 URL 时,重定向到 404 文档以及设置“Status 404 Not found”标头。 而且我不确定这是我想要的,因为无效的 URL 应该用 404 状态代码标记,而不是重定向。

    【讨论】:

      【解决方案3】:

      如果您在之前在ErrorDocument中定义重写,它应该可以工作。

      【讨论】:

      • 嗯,它没有。我认为贝努瓦是对的。仅从 PHP 发送没有内容的 404 标头,不会强制 Apache 在我的 ErrorDocument 中定义的 URL 处提供内容。我希望如此,但它没有发生。
      【解决方案4】:

      试试这个

      ErrorDocument 404 /404.html RewriteEngine On RewriteRule (.*) index.php [L]

      【讨论】:

      • 不,这根本没有帮助。另外,更改 URL 会破坏我的应用程序中的某些内容。
      • 我在 RewriteRule 中没有更改任何内容,它与您发布的相同。我刚刚编辑了您的 ErrorDocument 行,它肯定是正确的,请参阅此链接“httpd.apache.org/docs/2.0/mod/core.html#errordocument
      • @Gaurav:我知道这个话题已经过时了,但对于其他可能正在阅读的人来说......您使用的 ErrorDocument 肯定是正确的 -- 适合您的环境。如果 bogdanvursu 的环境中不存在“404.html”,您怀疑会发生什么?正如 Benoit 上面回答的那样,他正在处理 404 错误,但没有发生重定向,因为 RewriteRule 正在重写到有效的 url (index.php),因此从未调用过 ErrorDocument。问题是他的 index.php 正在返回一个 404 标头,但没有提供任何内容,因此用户什么也看不到。
      猜你喜欢
      • 2010-09-30
      • 2015-11-24
      • 2016-06-14
      • 2018-04-14
      • 2011-07-29
      • 2016-10-04
      • 2013-01-13
      • 1970-01-01
      • 2014-01-07
      相关资源
      最近更新 更多