php - 在不更改请求 URL 的情况下重定向到 HTTP 错误文档

标签 php http-headers http-status-codes

我正在尝试显示来自 PHP 页面的 HTTP 错误文档,但我希望原始 URL 保留在地址栏中以防止搜索引擎抓取工具混淆并允许重新加载页面以防万一临时问题。

我在 PHP 中做了一个重定向函数,有点像这样:

public static function Redirect($url, $code = '303 See Other') {
    header('HTTP/1.1 ' . $code);
    header('Location: ' . $url);
    exit(0);
}

如果我想显示错误文档,例如 403 Forbidden,我会执行以下操作:Redirection::Redirect('/errordocs/403.php', '403 Forbidden');它会很好地工作。

正如我所说,用户 URL 将更改为 /errordocs/403.php,我想避免这种情况。

我尝试做的是删除 header('Location: ' . $url); 如果 HTTP 代码是 4xx 或 5xx。我希望这会触发 Apache 显示正确的文档,因为我将我的 .htaccess 设置为指向相关的错误页面(它可以正常工作)。

我这样做实际上得到的是标准的谷歌 Chrome 浏览器消息,而不是我漂亮的自定义错误文档。

很快达成共识,现在最好的方法是什么?让它回显页面而不是重定向?

最佳答案

我只是做了同样的事情,但因为它是 404 - 未找到 - 在我看来 - 它已经消失了......

所以我这样设置我的 .htaccess 文件:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) - [G]
ErrorDocument 410 /error404.php

现在只要有人点击 404,它就会显示漂亮的 404 页面,但会停留在当前 url 上

注意:这是 .htacesss 文件的一个工作示例: http://www.smdailyjournal.com/stackoverflow

当你转到 Check the Header Codes 时你会看到它返回一个真正的 410 - Gone 消息:)

关于php - 在不更改请求 URL 的情况下重定向到 HTTP 错误文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006934/

相关文章:

php - Silverstripe 图片上传正在更改名称

javascript - jquery 使用 codeigniter 框架发布数据在 PHP 中不可见

php - 如何修改mysql用户密码?

javascript - 发送带有 header 的 AJAX 请求

php - Zend_Form : Database records in HTML table with checkboxes

C# HttpClient 文件流内容边界头错误

http - 如何使用 Apache Tomcat Valve Component 创建可靠的访问日志?

php - 如果未修改,使 PHP 页面返回 "304 Not Modified"

c# - System.Net HttpStatusCode 类没有代码 422

google-chrome - 更改 chrome 中给定 url 的 http 响应状态代码