【发布时间】:2011-07-01 00:09:10
【问题描述】:
我知道您可以发送一个标头,告诉浏览器该页面被禁止,例如:
header('HTTP/1.0 403 Forbidden');
但是我如何才能显示在服务器上针对此类错误创建的自定义错误页面?
默认情况下,仅发送标题会显示一个白色页面,但我记得前段时间阅读您可以使用客户错误页面。有人知道吗?
【问题讨论】:
标签: php header http-status-code-403
我知道您可以发送一个标头,告诉浏览器该页面被禁止,例如:
header('HTTP/1.0 403 Forbidden');
但是我如何才能显示在服务器上针对此类错误创建的自定义错误页面?
默认情况下,仅发送标题会显示一个白色页面,但我记得前段时间阅读您可以使用客户错误页面。有人知道吗?
【问题讨论】:
标签: php header http-status-code-403
只需在发送标头后回显您的内容。
header('HTTP/1.0 403 Forbidden');
echo 'You are forbidden!';
【讨论】:
Location 标头,因为它会更改响应代码。
http_response_code 是在 PHP 5.4 中引入的,让事情变得更容易了!
http_response_code(403);
die('Forbidden');
【讨论】:
更改标题后包含自定义错误页面。
【讨论】:
为此,您必须首先向浏览器说明用户收到错误 403。为此,您可以使用以下代码:
header("HTTP/1.1 403 Forbidden" );
然后,脚本发送“错误,错误,错误,错误,错误......”,所以你必须停止它。你可以使用
exit;
通过这两行,服务器发送错误并停止脚本。
不要忘记:模拟错误,但您必须将其设置在 .htaccess 文件中,使用
ErrorDocument 403 /error403.php
【讨论】:
看了很多答案,但正确的是按照php手册提供header函数调用的完整选项
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
如果你调用 with
header('HTTP/1.0 403 Forbidden', true, 403);
将遵循使用 Apache 或任何其他服务器配置的 HTTP 403 的正常行为。
【讨论】:
我已经阅读了这里的所有答案,但没有一个是针对我的情况的完整答案(在这个问题中完全相同),所以这是我收集建议答案的某些部分并提出确切解决方案的方式:
在之前任何HTML输出或标题下方回显此代码! (即使是空格也会导致 PHP 发送 HTML/TEXT HTTP Header 并且它不起作用) 下面的代码应该是您的第一行!
<?php header('HTTP/1.0 403 Forbidden');
$contents = file_get_contents('/home/your_account/public_html/domain.com/403.html', TRUE);
exit($contents);
现在您有了确切的解决方案。我通过 CPANEL 最新访问者进行了检查和验证,它被注册为确切的 403 事件。
【讨论】:
.htaccess
ErrorDocument 403 /403.html
【讨论】:
为了尽量减少服务器的职责,让它变得简单:
.htaccess
ErrorDocument 403 "Forbidden"
PHP
header('HTTP/1.0 403 Forbidden');
die(); // or your message: die('Forbidden');
【讨论】:
使用 ModRewrite:
RewriteRule ^403.html$ - [F]
只需确保在 www 根目录中创建一个名为“403.html”的空白文档,否则您将收到 404 错误而不是 403。
【讨论】:
我了解您的 apache conf 或 .htaccess 中已经定义了 ErrorDocument 的情况,并且希望在通过 php 手动发送 4xx 状态代码时显示这些页面。
不幸的是,这对于普通方法是不可能的,因为 php 将标头直接发送到用户的浏览器(而不是 Apache Web 服务器),而 ErrorDocument 是从 Apache 生成的 http 状态的显示处理程序。
【讨论】:
发送403后刷新页面:
<?php
header('HTTP/1.0 403 Forbidden');
?>
<html><head>
<meta http-equiv="refresh" content="0;URL=http://my.error.page">
</head><body></body></html>
【讨论】: