模拟403错误页面

Nig*_*awk 56 php header http-status-code-403

我知道你可以发送一个标题告诉浏览器这个页面是禁止的:

header('HTTP/1.0 403 Forbidden');
Run Code Online (Sandbox Code Playgroud)

但是,如何才能显示在服务器上为此类错误创建的自定义错误页面?

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

ale*_*lex 56

发送标题后,只需回显您的内容即可.

header('HTTP/1.0 403 Forbidden');

echo 'You are forbidden!';
Run Code Online (Sandbox Code Playgroud)

被禁止

  • 我知道我可以这样做,但是如何使用已经设置的自定义错误模板? (4认同)
  • @Ryan完全取决于您的应用程序的设置方式.有可能只包括它.不要发送`Location`标题,因为它会更改响应代码. (3认同)

Mar*_*ato 33

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

http_response_code(403);
die('Forbidden');
Run Code Online (Sandbox Code Playgroud)


Ibr*_*ail 21

更改标题后包括自定义错误页面.

  • Ryan,这听起来是正确的 - 让服务器端包含工作,你必须再次呼叫Apache以某种方式说,"没关系,不要以PHP的形式提供这个请求,而是'这个页面'代替" - 或者(在该行为的模拟中),通过请求403页面并将输出作为原始请求的响应发回来代理您自己的站点. (2认同)

小智 19

为此,您必须先为浏览器说用户收到错误403.为此,您可以使用以下代码:

header("HTTP/1.1 403 Forbidden" );
Run Code Online (Sandbox Code Playgroud)

然后,脚本发送"错误,错误,错误,错误,错误.......",所以你必须停止它.您可以使用

exit;
Run Code Online (Sandbox Code Playgroud)

使用这两行,服务器发送错误并停止脚本.

不要忘记:模仿错误,但必须在.htaccess文件中设置它

ErrorDocument 403 /error403.php
Run Code Online (Sandbox Code Playgroud)


小智 7

看到了很多答案,但是正确的方法是按照php手册为标头函数调用提供完整选项

void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
Run Code Online (Sandbox Code Playgroud)

如果您使用

header('HTTP/1.0 403 Forbidden', true, 403);
Run Code Online (Sandbox Code Playgroud)

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


Tar*_*rik 5

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

  1. 登陆您服务器的真实 403 页面。(转到您服务器上的禁止网址,或转到您喜欢的任何 403 页面)
  2. 右键单击并选择“查看源代码”。选择所有源并将其保存到您的域中的文件中,例如:http : //domain.com/403.html
  3. 现在转到您真正的禁止页面(或 php 某些部分的禁止情况)示例:http : //domain.com/members/this_is_forbidden.php
  4. 任何 HTML 输出或标题之前回显以下代码!(即使是空格也会导致 PHP 发送 HTML/TEXT HTTP 标头,它不会工作)下面的代码应该是你的第一行

        <?php header('HTTP/1.0 403 Forbidden');
        $contents = file_get_contents('/home/your_account/public_html/domain.com/403.html', TRUE);
        exit($contents);
    
    Run Code Online (Sandbox Code Playgroud)

现在您有了确切的解决方案。我检查并验证了 CPANEL 最新访问者,它被注册为精确的 403 事件。