この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
WordPressのページ構成変更に伴い日本語URLを日本語URLにリダイレクトしようした時にハマったのでメモしておきます。
最終的には、WordPressのRedirectionプラグインを使う事にしましたが、RewriteRuleでも成功しています。
書き方が違うので注意が必要です。
RewriteRuleを使う場合
Apacheの設定ファイルまたは.htaccessでmod_rewriteを有効にしてある前提です。
「http://example.com/ほげ」にアクセスされた場合に「http://example.com/ほげほげ」にリダイレクトする例です。
RewriteRule ^/\xe3\x81\xbb\xe3\x81\x92$ /\%e3\%81\%bb\%e3\%81\%92\%e3\%81\%bb\%e3\%81\%92 [NE,R=301,L]
「ほげ」をUTF-8でURLエンコードしたのはこれ「%e3%81%bb%e3%81%92」です。
転送元のURIは「%」を「\x」に、転送先のURIは「%」を「\%」とエスケープしてあげる必要があります。
また、最後に「NE」を追加して、エスケープしないようにしてあげる必要があります。
面倒ですね。
WordPressのRedirectionプラグインを使う場合
WordPressにRedirectionプラグインがインストール&有効化されている前提です。
RewriteRuleと同様に「http://example.com/ほげ」にアクセスされた場合に「http://example.com/ほげほげ」にリダイレクトする例です。
ソースURL:/%e3%81%bb%e3%81%92
ターゲットURL:/\%e3\%81\%bb\%e3\%81\%92\%e3\%81\%bb\%e3\%81\%92
「ほげ」をUTF-8でURLエンコードしたのはこれ「%e3%81%bb%e3%81%92」です。
転送元のURIはそのまま(RewriteRuleと異なる)で、転送先のURIは「%」を「\%」(RewriteRuleと同様)とエスケープしてあげる必要があります。
やはり面倒ですね。