1

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

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

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

感谢您的帮助

4

2 回答 2

1

它将为 Apache 中的 403 错误设置一个自定义错误文档,并将其指向一个脚本来处理错误。请参阅有关如何执行此操作的ErrorDocument文档,但大致如下:

ErrorDocument 403 /custom_403_handler.php
于 2012-08-09T05:42:26.743 回答
0

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

  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   
    
于 2012-08-09T06:43:35.300 回答