HTACCESSとは、サーバーがサイトへのアクセスがあった場合にページを表示する前に読み込んで、HTACCESSがあるディレクトリ以下すべてのファイルへのアクセスのルールを制御するファイルです。
HTACCESSファイルはワードプレスがインストールされている一番上のディレクトリ(フォルダー)に必ずあります。
※HTACCESSファイルがない場合はこちらの記事を参照されてください。
今回はワードプレスでよく使うHTACCESSファイルのリダイレクト設定につきまして解説したく思います。
この記事の目次
HTTPからHTTPS(SSL化)へのリダイレクト
サイトをHTTPからセキュアなHTTPSに変更された場合、過去のHTTPでのアクセスをHTTPSの方にリダイレクトする必要がございます。(検索エンジンに新しいURLを認識させるためにも必須でございます)
こちらのリダイレクトをHTACCESSファイルで制御可能です。サーバーによってリダイレクトが効いたり、効かなかったり、リダイレクトループに陥ったりすることがございますので書き方がいくつかございますので全て事例を挙げておきましたので、ご利用ください。
書き方1
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] </IfModule>
書き方2
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
書き方3
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP:X-Forwarded-SSL} =off RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] </IfModule>
書き方4
<IfModule mod_rewrite.c> RewriteCond %{HTTPS} !=on RewriteCond %{HTTP:X-Forwarded-Proto} !=https RewriteRule ^/?(.*) https://%{HTTP_HOST}/$1 [R=301,L] </IfModule>
※それでもリダイレクトループになる場合はこちらの記事を参照されてみてください
R=301は、恒久的にこのURLを利用しますということを示しています。Lは条件に適った場合ここで処理を止めるという意味です。この書き込みはHTACESSファイルの最上部に記載されてください。
旧ドメインから新しいドメインへのリダイレクト(リンク構造を保ったまま クエリも保ったまま)
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^(.*)$ http://新しいドメイン/$1 [R=301,L] </IfModule>
wwwをHTACCESSで削除して正規化するリダイレクト
URLからwwwを外して、正規化してリダイレクトするには下記のようにHTACCESSファイルに記載します。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC] RewriteRule ^(.*)$ http://%1%{REQUEST_URI} [R=301,QSA,NC,L] </IfModule>
QSAはクエリを引き継ぐ設定です。NCは大文字小文字を無視する設定です。
個別ページ(個別のURL)を任意のURLへのリダイレクト(ドメインが違う場合)
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^ドメイン以下のファイル.html$ http://リダイレクト先のドメイン/リダイレクトしたいファイル.html [R=301,L] </IfModule>
個別ページ(個別のURL)を任意のURLへのリダイレクト(ドメインが同じ場合)
<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^ドメイン以下の古いファイル.html$ ドメイン以下の新しいファイル.html [R=301,L] </IfModule>
ドメイン以下の古いファイルとドメイン以下の新しいファイルはHTMLである必要はありません。下記の例のように記載することも可能です。
RewriteRule ^oldfilename\.js$ newfilename.js [L,R=301]
全てのアクセスを一つのURLにリダイレクトする
サイトをクローズしたときや、移行後に全てのアクセスを新しいサイトの特定の1ページにリダイレクトされたい場合に利用されてください。
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{http_host} ^リダイレクトしたいすべてのファイルを含むサイトのドメイン [NC] RewriteRule ^(.*)$ http://リダイレクト先のドメイン/リダイレクト先のファイル [R=301,NC,L] </IfModule>
リダイレクトしたいすべてのファイルを含むサイトのドメインの部分の書き方は下記のようになります。
RewriteCond %{http_host} ^oldsite.com [NC]
RewriteRule ^(.*)$ http://www.newsite.com/ [R=301,NC,L]
新しいドメインにクエリ付きでリダイレクトする
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_HOST} ^mydomain\.jp$ [OR] RewriteCond %{HTTP_HOST} ^www\.mydoain\.jp$ RewriteRule (.*)$ http://newmydomain.jp/$1 [R=301,L] </IfModule>
特定のディレクトリを一つ上にリダイレクト
<IfModule mod_rewrite.c> RewriteEngine on RedirectMatch 301 ^/wp/(.*)$ http://mydomain.jp/$1 </IfModule>
特定のディレクトリだけリダイレクトする
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^リダイレクトしたいディレクトリ名/(.*)$ /新しいディレクトリ名/$1 [R=301,NC,L] </IfModule>
書き方の例は下記のようになります
RewriteRule ^wp/(.*)$ /wordpress/$1 [R=301,NC,L]
拡張子を変えるリダイレクト
次の例では、HTMLをHTMに、JPEGをJPGに変更するリダイレクトの記載方法です。
<IfModule mod_rewrite.c> RewriteEngine on RewriteRule ^(.*).html$ http://あなたのサイトドメイン/$1.htm [R=301,L] RewriteRule ^(.*).jpeg$ http://あなたのサイトドメイン/$1.jpg [R=301,L] </IfModule>
特定のIPでアクセスされたときにリダイレクトしない
このHTACCESS設定は、例としてメンテナンス中に全てのユーザーをmentenance.htmlにリダイレクトするが、000.000.000.000(任意のIPを設定されてください。)のIPの管理者だけはサイトにリダイレクトさせずに正常にアクセス可能とします。
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_URI} !=/mentenance.html RewriteCond %{REMOTE_ADDR} !=000.000.000.000 RewriteRule ^.*$ - [R=503,L] </IfModule>