日本語パラメータ付きURL(PukiWikiなど)の301リダイレクト
カテゴリ:サイト構築記
日付:2010/02/28 20:06
PukiWikiなど、日本語のパラメータがURLに含まれるページのリダイレクトには注意が必要だ。日本語のパラメータはURLエンコードされるが、リダイレクトのタイミングで1回余計にエンコードが行われてしまうため、正常にデコードできない。
例えば、パラメータに「日本語」が含まれる場合、まず「%93%fa%96%7b%8c%ea」にエンコードされる。301リダイレクトを行うと、この文字列に含まれる「%」が「%25」にエンコードされ、「%2593%25fa%2596%257b%258c%25ea」になってしまう。リダイレクト後にこれがデコードされるが「%93%fa%96%7b%8c%ea」となってしまい、「日本語」には戻らないのだ。
京極夏彦作品人名事典では、.htaccess+mod_Rewriteではなく、PHPを使う方法でこの問題を回避した(PHPが唯一解というわけではないが)。
まず、旧URLに以下の内容のindex.phpを作る。
<?php
$strQueryString = $_SERVER["QUERY_STRING"];
header("HTTP/1.1 301 Moved Permanently");
if ($strQueryString == NULL) {
header( "Location: http://kyogoku.reichsarchiv.jp/");
} else {
$strQueryString = ereg_replace('%25', '%', $strQueryString);
header( "Location: http://kyogoku.reichsarchiv.jp/?" . $strQueryString);
}
?>
header("HTTP/1.1 301 Moved Permanently");
が、301リダイレクトのための指定。
$_SERVER["QUERY_STRING"]
でパラメータを取得し、パラメータがない場合は単純に新URLへ転送。パラメータがある場合は、文字列に含まれる「%25」を「%」に置換したパラメータを付けてから転送している。
コメント
まだコメントはありません

京極夏彦作品人名事典
Gentoo Linuxで自宅サーバ