WordPressで日本語URLを使っている場合、URLが以下のようになります。
http://takahitokikuchi.poitan.net/2013/05/30/%E3%83%AA%E3%82%AF%E3%83%AB%E3%83%BC%E3%83%88%E3%82%AB%E3%83%BC%E3%83%89%E3%83%97%E3%83%A9%E3%82%B9%EF%BC%88jcb%EF%BC%89%E3%82%92%E7%94%B3%E3%81%97%E8%BE%BC%E3%81%BF/
%E3%83のようになり、この%**の問題で、「400 Bad Request」と表示されるということを書いたことがあります。これは、リンク自体を修正することでエラーにならないようにしましたが、外部のリンクの場合はリンクを修正することはできません。
400 Bad Requestの場合はトップにでもリダイレクトすれば良いと思い、.htaccessに以下のように記述しました。404などではよくやるパターンですよね。
ErrorDocument 400 /400.php
これで、400.phpでトップページにリダイレクトすればOKだと思いましたが、思っているように動いてくれません。色々悩んだ所、400 Bad Requestの場合は.htaccessでは対応できないのでは?と思い、httpd.confのVirtualHostに上記の記述を入れました。これで、400.phpにアクセスされました。
400.phpにアクセスできれば、トップページではなく、URLの形式を戻してからリダイレクトすれば良いため、400.phpを以下のようにします。%+1文字で終了している、または%で終わっている場合はそれを削除、という処理です。
<?php $url = preg_replace ('/(%[a-f0-9]{1}|%)+$/i', '', $_SERVER["REQUEST_URI"]); header ("HTTP/1.1 301 Moved Permanently"); header ("Location: " . $url); exit; ?>
一応、これで動作しています。