我们有一个旧网址,我们希望通过PHP重定向到新位置。 (请不要讲这是否是最好的方法;这是已经决定的。)
如果用户转到http://oldurl.com,我们希望重定向到http://newurl.com。如果他们转到http://oldurl.com/locations/illinois/12345(或此格式的任何其他基于位置的网址),我们希望重定向到http://newurl.com/locations/illinois/12345。
<?php
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = explode('/', $_SERVER['REQUEST_URI_PATH']);
if(is_array($segments) && in_array("locations", $segments)) {
header('Location: http://newurl.com/locations/' . $segments[2] . '/' . $segments[3]);
}
else {
header('Location: http://newurl.com');
}
if
条件有效 - 它会重定向到动态构建的网址。但是,如果用户转到http://oldurl.com,而不是点击其他条件并重定向到http://newurl.com,则会保留原始网址并提供空白页面。
知道为什么吗?
答案 0 :(得分:0)
is_array
将始终在此实例中返回true
因为路径,无论如何,即使它是根目录,也有一个/在开头。这将导致字符串像[0]/[1]
如果您的REQUEST_URI
是/,您将获得一个包含两个等于""
的条目的数组
这应该有用。
<?php
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = explode('/', $_SERVER['REQUEST_URI_PATH']);
if(!(count($segments) == 2) && !(in_array("", $segments))) {
header('Location: http://order.pizzahut.com/locations/' . $segments[2] . '/' . $segments[3]);
}
else {
header('Location: http://order.pizzahut.com');
}
如果我没有遗漏某些东西,这应该有效。
答案 1 :(得分:0)
这会有用吗?
<?php
$_SERVER['REQUEST_URI_PATH'] = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$url = $_SERVER['REQUEST_URI_PATH'];
if (substr($url, 0, 7) == "http://")
$url = substr($url, 7, $url.length);
$segments = explode('/', $url, 2);
if(is_array($segments)) {
header('Location: http://order.pizzahut.com/' . $segments[1]);
}
else {
header('Location: http://order.pizzahut.com');
}
您可以在/
http://
的第一个版本中拆分,而不是在多个字符串中拆分网址。