就像标题所说的那样,想知道我是否需要在每个PHP if语句之后放置exit();
,或者仅仅是主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
语句使其正常工作。必须为每个if
代码块中的elseif
语句添加更多条件。
最终代码如下所示
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();
}
}
答案 0 :(得分:2)
如果您的目标是始终在此块中执行重定向,请将退出语句放在大括号外的最后一个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 == '' ) {
$new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
} elseif ( isset($home) ) {
if ( $arr_position == '' ) {
$new_url = 'http://' . $domain;
} else {
$new_url = 'http://' . $domain . strtolower ( '/ jobs/?occupation='.$arr_occupation.'&position='.$arr_position);
}
} elseif ( $arr_position == '' ) {
$new_url = 'http://' . $domain . '/jobs/';
}
if ($new_url !== false) {
header('Location: ' . $new_url, true, 301);
exit;
}
}
答案 1 :(得分:1)
在每次header()
通话后的情况下:您有4种不同的条件且无或多可能匹配,因此您可以执行多个header()
来电或根本不执行您已经通过了上一个if
语句,导致您的页面退出而没有任何重定向。
如果它是一个if
语句的块,后跟一个或多个以elseif
结尾的else
语句,所有语句都包含重定向,则可以将其放在最后:< / p>
if
header();
elseif
header();
elseif
header();
else
header();
exit;
但这是唯一的情况,因为如果当前代码中的if
语句都不匹配,则需要进行某种错误处理。