【发布时间】:2014-11-25 19:24:18
【问题描述】:
正如标题所说,想知道我是否需要将exit(); 放在每个 PHP if 语句之后,或者只是主要的 if 语句或只是最后一个 if 语句?目前我在最后一个 if 语句中有它,它工作正常。
if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) || $occupation == '' ) {
header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
}
if ( $arr_position == '' ) {
header ('Location: http://' . $domain . '/jobs/', true, 301);
}
if ( isset($home) && $arr_position == '' ) {
header ('Location: http://' . $domain, true, 301);
}
if ( isset($home) && $arr_position != '' ) {
header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
exit();
}
}
更新
我将其更改为在每次标头位置调用后都有一个 exit() 并且一切仍然正常。这是在我的主模板文件中,所以是的,如果块头位置中没有任何匹配项,则下面的代码需要执行。
我现在是这样的
if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) || $occupation != strtolower($arr_occupation) ) {
header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
exit();
}
if ( $arr_position == '' ) {
header ('Location: http://' . $domain . '/jobs/', true, 301);
exit();
}
if ( isset($home) && $arr_position == '' ) {
header ('Location: http://' . $domain, true, 301);
exit();
}
if ( isset($home) && $position == urlencode($arr_position) ) {
header ('Location: http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position), true, 301);
exit();
}
}
更新 2
我继续使用 DefiniteIntegral 答案,因为我喜欢这种逻辑,但我必须在主块中使用单独的 if 语句。使用elseif 不起作用。我已经对其进行了全面测试,并在每个elseif 中使用了不同的条件,但它无法正常工作。所以我可以在主块中使用单独的 if 语句。
这是现在的样子
if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
$new_url = false;
if ( strpos($_SERVER['QUERY_STRING'], 'occupation') === false || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) || $occupation != strtolower($arr_occupation) ) {
$new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
}
if ( $arr_position == '' ) {
$new_url = 'http://' . $domain . '/jobs/';
}
if ( isset($home) && $arr_position == '' ) {
$new_url = 'http://' . $domain;
}
if ( isset($home) && $arr_position != '' ) {
$new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
}
if ($new_url !== false) {
header('Location: ' . $new_url, true, 301);
exit();
}
}
最终更新
终于让它与elseif 语句一起正常工作。必须在每个 elseif 代码块中的 if 语句中添加更多条件。
最终代码如下所示
if ( isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING']) ) {
$new_url = false;
if ( !isset($occupation) || $occupation != strtolower($arr_occupation) || $_SERVER['REQUEST_URI'] != strtolower($_SERVER['REQUEST_URI']) ) {
$new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
} elseif ( isset($home) ) {
if ( !isset($position) || $position != $arr_position || $position == '' ) {
$new_url = 'http://' . $domain;
} else {
$new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
}
} elseif ( $currentPage == 'Jobs' ) {
if ( !isset($position) || $position == '' ) {
$new_url = 'http://' . $domain . '/jobs/';
} elseif (isset($position) && $position != '' && $position != $arr_position) {
$new_url = 'http://' . $domain . strtolower ( '/jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
}
}
if ($new_url !== false) {
header('Location: ' . $new_url, true, 301);
exit();
}
}
【问题讨论】:
标签: php exit http-redirect