在php中触发403,以便显示ErrorDocument

时间:2014-01-22 15:39:05

标签: php .htaccess http-status-code-403

最近我为我的服务器设置了自定义的错误文档。

我开始使用404页面,这就像一个魅力:未找到的文件会自动显示指定的404.php页面。 但是,403我遇到了一些麻烦。我以同样的方式设置它,但我只得到一个空白页面。它不显示.htaccess文档中设置的403.php页面。 有什么想法吗?

这是我的代码:

htaccess的:

Options -Indexes
ErrorDocument 403 /403.php
ErrorDocument 404 /404.php

PHP:

<?php 
header("HTTP/1.1 403 Unauthorized");
exit;
?>

2 个答案:

答案 0 :(得分:6)

服务器(Apache)遇到403错误时,服务器配置中定义的错误文档才会被加载。

如果您通过PHP强制执行错误,例如发送403状态代码,则会发生在PHP而非Apache中。

因此,当您已经知道我想渲染的网站会因未经授权的而失败时,为什么要将它留给apache会发生什么?

<?php 
header("HTTP/1.1 403 Unauthorized");
// either:
header("Location: /403.php");
// or:
include('403.php');
exit;
?>
  

我从一个404页开始,这就像一个魅力:

你确定吗?

你有脚本,发送404并重定向到404.php? 或者你刚刚打开一个不存在的URI并被重定向?

答案 1 :(得分:1)

转到您服务器的真实403页面。 (转到服务器上的禁止URL,或转到您喜欢的任何403页面)

右键单击并选择“查看来源&#39;”。选择所有来源并将其保存到您的域中的文件,如:http://domain.com/403.php

现在转到你真正禁止的页面(或你的某些部分的禁止情况)示例:http://domain.com/members/my_forbidden_page.php

在任何HTML输出或标题之前回复下面的代码! (即使是空格也会导致PHP发送HTML / TEXT HTTP标头并且它不能工作)下面的代码应该是你的第一行!

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

我使用CPANEL最新访问者进行了检查和验证,并将其注册为403事件。