繁体   English   中英

如何使用PHP处理403错误

[英]how to handle a 403 error with PHP

我已经构建了一个php脚本,由于$ _POST方法发送的数据的长度和内容,有时有时服务器会返回403错误消息(禁止访问)。 由于某些mod_secure规则会过滤服务器上发送的数据,因此返回此403错误消息。

PHP是否可以处理此403错误消息? 例如,我将在运行脚本时捕获服务器状态,然后在服务器返回403状态代码时显示错误消息。 在PHP中甚至可以做到这一点吗?

换句话说,如果不执行重定向,我只想在当前页面中显示一条自定义消息,如果服务器在执行PHP脚本本身时返回403状态代码。

谢谢你的帮助

将为Apache中的403错误设置一个自定义错误文档,并将其指向用于处理该错误的脚本。 有关执行此操作的方法,请参考ErrorDocument文档,但这可能与以下内容类似:

ErrorDocument 403 /custom_403_handler.php

因此,我为您提供三种可能的解决方案。

  1. 检查URL错误,并确保指定了实际的网页。 URL指向目录而不是网页时,网站返回403 Forbidden错误的常见原因。 可以使用PHP中的HttpRequest类来完成。 您可以使用http_get执行GET请求。 您也可以在此处测试URL

     <?php $response = http_get("URL", array("timeout"=>1), $info); print_r($info); ?> 

    输出:

     array ( 'effective_url' => 'URL', 'response_code' => 403, . and so on ) 

    对您而言重要的是可以进一步发挥作用的response_code。

  2. 使用卷曲。

     function http_response($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, TRUE); curl_setopt($ch, CURLOPT_NOBODY, TRUE); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); $head = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if(!$head) { return FALSE; } return $httpCode; } $errorcode = http_response("URL"); //if success 200 otherwise different 
  3. 如果您确定要访问的页面正确,则403 Forbidden错误消息可能是错误的。 然后,您只能做两件事,要么与网站管理员联系,要么使用您自己的自定义重定向。 为此,请在.htaccess文件中添加以下行,并在forbidden.php中处理该错误

     ErrorDocument 403 /forbidden.php 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM