2012-02-20 6 views
1

いくつかのURLをリダイレクトする必要があります。ヘッダーが値渡しのすべてを使用していません

かつて私はこれらは私が古いURLにアクセスしようとする試みを処理するために、自分のコードに次のように入れ

http://mysite.com/foobar/1234 

へのポインティング

http://mysite.com/foobar/?section_id=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); 
} 

問題は、URLをリダイレクトした後です:

http://mysite.com/foobar 

必要なIDはありません。そのif声明の中で

私は

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

をすれば、私が得る:

http://mysite.com/foobar/1234 

が、その後、リダイレクトはまだ1234一部を含めることができません。

これはなぜ、どのようにリダイレクトするのですか?オオヤマネコの


出力Locationヘッダは、その値として絶対的に有効なURLを持っている必要があります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 
+0

もしあなたができるなら、リダイレクトは 'mod_rewrite'を使ってもっと簡単になります –

+2

' http:// mysite.com/foobar/1234'はあなたを 'http:// mysite.com/foobar /'にリダイレクトしないことを確認しましたか? ? '$ lynx -head -dump http:// mysite.com/foobar/1234'はヘッダが正しいかどうかを判断するのにも役立ちます。 – Vitamin

+0

@Vague私はそれを試してみましたが、それは私には正しいと思われました(私は質問に出力を添付しました) – Lothar

答えて

3

を-dump -head。私。はhttp://で始まる必要があります。

編集Locationのヘッダー値は、スラッシュ「/」で始まる絶対パスにすることもできます。

+0

これを読んでいる人は私の 'Location'ヘッダ(lynxの出力例で)が' http:// 'で始まらないことを知っています。これで修正されました。 – Lothar

関連する問題