4

我试图从 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 设置为指向相关的错误页面(它可以正常工作)。

我实际上从中得到的是标准的 Google Chrome 浏览器消息,用于当东西中断时,而不是我漂亮的自定义错误文档。

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

4

2 回答 2

2

我只是做了同样的事情,但因为它是 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

当你去检查标题代码时,你会看到它返回一个真正的 410 - Gone 消息:)

于 2012-12-22T22:05:17.037 回答
1

如果是 4xx 状态码,您可以只显示错误 html 的内容。否则重定向:

public static function Redirect($url, $code = '303 See Other') {
    header('HTTP/1.1 ' . $code);
    if(strpos($code, '4') === FALSE) {
        header('Location: ' . $url);
    } else {
        include(get_error_page_file_name($code));
    }
    exit(0);

}

上面的示例将发送正确的 HTTP 状态代码,将显示错误页面的内容并保持地址中的 url 相同。

于 2012-12-22T22:05:08.393 回答