【问题标题】:how to handle a 403 error with PHP如何使用 PHP 处理 403 错误
【发布时间】:2012-08-06 07:40:42
【问题描述】:

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

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

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

感谢您的帮助

【问题讨论】:

  • 你的意思是,你想自定义错误页面?如果是,则可以使用 .httaccess 重定向方法。在 .htaccess 文件中添加 ErrorDocument 403 /forbidden.php 并保存。
  • 并非如此。在不进行重定向的情况下,如果服务器在执行 PHP 脚本本身时返回 403 状态代码,我只想在当前页面中显示一条自定义消息。谢谢

标签: php http-status-code-403


【解决方案1】:

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

ErrorDocument 403 /custom_403_handler.php

【讨论】:

  • 如果不进行重定向,我只想在当前页面中显示一条自定义消息,如果服务器在执行 PHP 脚本本身时返回 403 状态码。谢谢
  • 这是一篇很长的文章。基本上,它是一个包含 html 数据的 json 字符串。在一些激活了 mod_secure 的服务器上,字符串包含 html 的简单事实导致与 mode_secure 规则之一发生冲突,然后服务器返回 403 禁止访问页面。此外,数据是通过 jQuery ajax 调用发送的,因此如果服务器返回 403 错误,则用户认为 ajax 调用正在永远加载,而只是服务器不返回任何内容。从那里,我要么用 PHP 检查服务器返回的状态码,要么检查 mod_secure 是否被激活。
  • 我不确定您的要求,但您可以使用 cURL php.net/manual/en/book.curl.php
【解决方案2】:

所以我为您提供了三种可能的解决方案。

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

    <?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 文件中添加以下行并在禁止的.php 中处理该错误

    ErrorDocument 403 /forbidden.php   
    

【讨论】:

猜你喜欢
  • 2016-02-14
  • 1970-01-01
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 2019-01-13
  • 1970-01-01
  • 2010-11-09
  • 2016-12-26
相关资源
最近更新 更多