【发布时间】:2023-03-30 19:05:01
【问题描述】:
我们希望通过 PHP 将旧 URL 重定向到新位置。 (请不要谈论这是否是最好的方法;这是已经决定的。)
如果用户转到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 条件有效 - 它重定向到动态构建的 url。但是当用户转到http://oldurl.com 时,它不会点击 else 条件并重定向到 http://newurl.com,而是停留在原始 url 上并提供一个空白页面。
知道为什么吗?
【问题讨论】:
-
尝试查看错误日志。空白页通常意味着 500 错误,并且会在错误日志中写入一些内容。
-
空白页可能意味着错误。 php.net/manual/en/function.error-reporting.php - 使用它并记录或显示,然后回来告诉我们它是什么,如果有错误。
-
var_dump($segments);在您的页面上。看看你主页上的$_SERVER['REQUEST_URI']是否有任何内容。 -
这是奇怪的部分 - 日志中没有错误。而且我已经完成了
$segments的回声;它包含我期望它包含的内容。 -
您是否尝试过在每个
header之后执行exit,否则它似乎对我有用。我猜代码在你显示的代码之后会继续做其他事情