htaccess /?p=123の様なクエリストリングを含むURLを特定ディレクトリにリライトする方法

この記事は5年前に書かれました。不適当な記述を含む場合がありますので、参考程度に留めてください。

どうもこんばんは。Toshikuraです。今回のTipsは【htaccess /?p=123の様なクエリストリングを含むURLを特定ディレクトリにリライトする方法】です。
ディレクトリ単位でしたらなんら問題ないのですが、WP上でパーマリンクを変更した場合やURLを変更した際にindex.htmlや?p=123の様なURLが検索上に残る事があります。アクセスを分散させる要因にもなりかねませんのでSEO的にはすべからく301リダイレクトで統一しておいた方が良いかと思います。個人的にはあまり直面した事のない状況ですが、今後の為を考えてメモです。

クエリストリングのリライト実装例

【 http://sample.com/?p=123….. 】から【 http://example.com 】へ


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=
RewriteRule ^$ http://example.com/? [R=301,L]
</IfModule>

【 http://sample.com/?p=123….. 】から【 http://sample.com/news/ 】へ

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=
RewriteRule ^$ /news/? [R=301,L]
</IfModule>

【 http://sample.com/?p=123….. 】から【 http://sample.com 】へ

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{QUERY_STRING} ^p=
RewriteRule ^$ /? [R=301,L]
</IfModule>

若干抜けている所が有るかもしれませんので任意でお試しください。またこれだけでは少々短いので【index.html】を無しに統一する方法もメモしておきます。

index.htmlのリライト実装例

【 http://example.com/index.html 】から【 http://example.com 】へ


<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index.html
RewriteRule ^(.*)index.html$ http://example.com/$1 [R=301,L]
</IfModule>

以上になります。後半に関してはお使いのサーバーHPをご参照頂ければと思います。