[英]Redirecting to HTTP error documents without changing the request URL
我正在尝试从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设置为指向相关的错误页面(它可以正常工作)。
我实际上得到的是标准的谷歌浏览器消息,当时东西中断而不是我漂亮的自定义错误文档。
快速达成共识,现在最好的方法是什么? 让它回显页面而不是重定向?
我只是做了同样的事情,但因为它是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 - 消息:)
如果是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在地址中保持相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.