以前書いた記事にも関連するところだが、
http://〇〇〇.com/abc.html
へのアクセスを
http://〇〇〇.com/def.html
にリダイレクトさせたい場合について、いくつかのケースでの対処法をまとめておくことにする。(まとめないとすぐに忘れてしまうので)
1.アルファベットドメイン、アルファベットURIの場合
いろいろやり方はあるが
簡単なのは、.htaccessに
(1.1)
[html]RewriteCond %{REQUEST_URI} /abc.html
RewriteRule (.*) http://〇〇〇.com/def.html [R=301,L][/html]
もしくは
(1.2)
[html]Redirect 301 /abc.html http://〇〇〇.com/def.html[/html]
と書く方法。
.htaccessを使いたくない場合(もしくは使えない場合)は、もしWordPressを入れているサイトだと、
(1.3)
『Redirection』という無料のプラグインを入れれば簡単に対処できる。
2.アルファベットドメイン、日本語URIの場合
例えば、リダイレクト先が
http://〇〇〇.com/はじめに/
だったような場合。
まず、.htaccessで処理しようとした時に
[html]RewriteCond %{REQUEST_URI} /abc.html
RewriteRule (.*) http://〇〇〇.com/%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB/ [R=301,L][/html]
このように書いても、RewriteRuleの中で%nが独自の意味を持ってしまうため、うまくリダイレクトされない。
RewriteRuleを使ってどうしてもリダイレクトさせたいのならば、URIがエンコードされた部分の「%」をエスケープして、さらに、フラグとしてNo Escapeを意味する[NE]を指定することで、リダイレクトできるようになる。上の例で言うと、
(2.1)
[html]RewriteCond %{REQUEST_URI} /abc.html
RewriteRule (.*) http://〇〇〇.com/\%E3\%81\%AF\%E3\%81\%98\%E3\%82\%81\%E3\%81\%AB/ [R=301,L,NE][/html]
となる。
で、実は、RewriteRuleを使わずに、Redirect 301~を使う場合は%nがURLに入っていても問題なくリダイレクトされる。したがって、
(2.2)
[html]Redirect 301 /abc.html http://〇〇〇.com/%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB/[/html]
でOK。こっちのほうが断然簡単なのである。
(2.3)
ちなみに、1と同じく、WordPressを入れているならば『Redirection』が問題なく使える。
3.日本語ドメインの場合
念のためと思って日本語ドメインのケースも調べてみた。
(3.1)(3.2)
すると、.htaccessを使う場合は、アルファベットドメインのケースと同じ書き方で問題なくリダイレクトできた。
しかし、動きが異なったのがWordPressの『Redirection』プラグイン。
リダイレクト先として設定した
http://〇〇〇.com/はじめに/
のドメインの「〇〇〇」の部分が認識できず
http://.com/はじめに/
にリダイレクトされてしまうという事態に。
細かい原因はわからないが、日本語ドメインでリダイレクトさせたい場合は『Redirection』プラグインは使えないことは覚えておこう。
(勘違いだったらごめんなさい)