我有这个代码应该检查一个页面是否不存在,或者它是否包含它不应该包含的任何内容,并且由于某种原因它会向我抛出错误,更具体地说是406,如果我去任何主页以外的页面($ _GET =“”)。
以下是代码,并提前感谢您的帮助:)
$currentpage = $_GET['a'];
$pages[1] = "";
$pages[2] = "help";
$pages[3] = "work";
$pages[4] = "download";
$pages[5] = "process";
$pages[6] = "safariex";
$pages[7] = "services";
if(isset($_GET) && !ctype_alpha($_GET) && $_GET['a'] != ""){
header("Location: http://pattersoncode.ca/error.php?ec=406");
}
if (!ctype_alpha($_GET['a']) && $_GET['a'] != "") {
header("Location: http://pattersoncode.ca/error.php?ec=406");
}
if ( ! in_array( $currentpage, $pages ) )
{
header("Location: http://pattersoncode.ca/error.php?ec=404");
}
答案 0 :(得分:6)
我确实认为这是错误的:
!ctype_alpha($_GET)
$_GET
是一个数组,而不是一个字符串。 ctype_alpha($_GET)
总是等于假。
你可能想要这个:
if(!isset($_GET["a"]) || !ctype_alpha($_GET["a"])) {
header("Location: http://pattersoncode.ca/error.php?ec=406");
exit();
}
哪个应该照顾406条件。
在大多数情况下,您还希望在执行重定向时执行exit()。
如果可能的话,发送实际的http响应代码而不是重定向会更好:
header('HTTP/1.1 406 Not Acceptable', true, 406);