我已经构建了一个php脚本,由于通过$ _POST方法发送的数据的长度和内容,有时服务器会返回403错误消息(禁止访问)。返回此403错误消息是因为某些mod_secure规则会过滤服务器上发送的数据。
是否可以让PHP处理此403错误消息? 例如,我在运行脚本时捕获服务器状态,然后在服务器返回403状态代码时显示错误消息。 甚至可以在PHP中执行此操作吗?
换句话说,在不进行重定向的情况下,如果服务器在执行PHP脚本本身时返回403状态代码,我只想在当前页面中显示自定义消息。
感谢您的帮助
答案 0 :(得分:1)
将在Apache中为403错误设置自定义错误文档,并将其指向脚本以处理错误。请参阅ErrorDocument文档,了解如何执行此操作,但这将是以下几点:
ErrorDocument 403 /custom_403_handler.php
答案 1 :(得分:0)
所以我有三种可能的解决方案。
检查网址错误并确保指定了实际的网页。当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,您可以使用它来进一步发挥。
使用卷曲。
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
如果您确定要尝试访问的页面是正确的,则403 Forbidden错误消息可能是错误的。然后你只能做两件事,要么联系网站管理员,要么使用你自己的自定义重定向。为此,在.htaccess文件中添加以下行并在forbidden.php中处理该错误
ErrorDocument 403 /forbidden.php