81

我知道您可以发送一个标头,告诉浏览器该页面被禁止,例如:

header('HTTP/1.0 403 Forbidden');

但是,我怎样才能显示在服务器上针对此类错误创建的自定义错误页面?

默认情况下,仅发送标题会显示一个白页,但我记得前段时间阅读您可以使用客户错误页面。有人知道吗?

4

11 回答 11

76

只需在发送标头后回显您的内容。

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';

禁止的

于 2011-02-21T02:21:33.633 回答
65

http_response_code是在 PHP 5.4 中引入的,它让事情变得更容易了!

http_response_code(403);
die('Forbidden');
于 2017-04-25T14:44:04.167 回答
29

更改标题后包含自定义错误页面。

于 2011-02-21T02:30:30.133 回答
20

For this you must first say for the browser that the user receive an error 403. For this you can use this code:

header("HTTP/1.1 403 Forbidden" );

Then, the script send "error, error, error, error, error.......", so you must stop it. You can use

exit;

With this two lines the server send an error and stop the script.

Don't forget : that emulate the error, but you must set it in a .htaccess file, with

ErrorDocument 403 /error403.php
于 2013-04-18T17:26:32.603 回答
10

看过很多答案,但正确的是按照php手册提供头函数调用的完整选项

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )

如果你调用

header('HTTP/1.0 403 Forbidden', true, 403);

Apache 或任何其他服务器配置的 HTTP 403 的正常行为将遵循。

于 2016-12-11T04:24:30.870 回答
5

我已经阅读了这里的所有答案,但没有一个是针对我的情况的完整答案(在这个问题中完全相同)所以这是我收集建议答案的某些部分并提出确切解决方案的方式:

  1. 登陆您服务器的真实 403 页面。(转到您服务器上的禁止 URL,或转到您喜欢的任何 403 页面)
  2. 右键单击并选择“查看源代码”。选择所有源并将其保存到您的域上的文件中,例如:http ://domain.com/403.html
  3. 现在转到您真正的禁止页面(或您的 php 某些部分中的禁止情况)示例:http ://domain.com/members/this_is_forbidden.php
  4. 在任何 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 事件。

于 2015-10-06T18:00:46.307 回答
4

.htaccess

ErrorDocument 403     /403.html
于 2011-02-21T02:31:49.187 回答
3

为了尽量减少服务器的职责,让它变得简单:

.htaccess

ErrorDocument 403 "Forbidden"

PHP

header('HTTP/1.0 403 Forbidden');

die(); // or your message: die('Forbidden');
于 2014-02-05T21:34:54.470 回答
2

使用 ModRewrite:

RewriteRule ^403.html$ - [F]

只需确保在 www 根目录中创建一个名为“403.html”的空白文档,否则您将收到 404 错误而不是 403。

于 2015-02-01T22:46:29.983 回答
1

我了解您的 apache conf 或 .htaccess 中已经定义了 ErrorDocument 的情况,并且希望在通过 php 手动发送 4xx 状态代码时显示这些页面。

不幸的是,这对于普通方法是不可能的,因为 php 将标头直接发送到用户的浏览器(而不是 Apache Web 服务器),而 ErrorDocument 是从 Apache 生成的 http 状态的显示处理程序。

于 2014-11-27T15:22:35.003 回答
-1

发送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>
于 2014-10-12T06:08:09.313 回答