0

我有这段代码应该检查页面是否不存在,或者它是否包含任何不应该包含的内容,并且由于某种原因,如果我转到任何页面以外的页面,它会向我抛出错误,更具体地说是 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");
}
4

1 回答 1

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);
于 2013-08-10T20:16:32.803 回答