标头未使用全部传入的值

时间:2012-02-20 18:41:40

标签: php redirect

我需要重定向一些网址。

以前我有

http://mysite.com/foobar/?section_id=1234

这些都没有指向

http://mysite.com/foobar/1234

我在我的代码中添加了以下内容来处理访问旧网址的尝试:

$section_id = filter_input(INPUT_GET, 'section_id', FILTER_SANITIZE_NUMBER_INT);

if ( $section_id ) {
    header( "HTTP/1.1 301 Moved Permanently" );
    header( "Location: ".$_SERVER["SERVER_NAME"]."/foobar/".$section_id );
}

问题是重定向网址后是:

http://mysite.com/foobar

所需的ID不存在!

如果我这样做if陈述

echo "Location: ".$_SERVER["SERVER_NAME"]."/foobar/".$section_id;

我明白了:

http://mysite.com/foobar/1234

但是重定向仍然无法包含1234部分。

为什么会这样,以及如何根据需要重定向?


lynx -head -dump http://mysite.com/foobar/1234的输出(即看起来对我来说是正确的)

HTTP/1.1 301 Moved Permanently
Date: Mon, 20 Feb 2012 18:55:09 GMT
Server: Apache/2.2.3 (CentOS)
X-Powered-By: PHP/5.2.6
Set-Cookie: PHPSESSID=c35123456; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
X-Pingback: http://mysite.com/xmlrpc.php
Link: <http://wp.me/mysite>; rel=shortlink
Location: mysite.com/foobar/1234
Vary: Accept-Encoding
Connection: close
Content-Type: text/html; charset=UTF-8

1 个答案:

答案 0 :(得分:3)

Location标头必须具有绝对有效的URL作为其值。即必须以http://开头。

修改Location标头值也可以是以正斜杠/开头的绝对路径。