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」を「%」に置換したパラメータを付けてから転送している。