こんにちは!たく丸です。

今回は、.htaccessを使ったリダイレクト(転送)の書き方をご紹介します。
コピペで使えるコードをまとめたので、ぜひ参考にしてください。

そもそも.htaccessとは?

.htaccessとは、Apache(またはLiteSpeed)というWebサーバーの動作を、ディレクトリ単位で制御するための設定ファイルです。

.htaccessを使うと、次のようなことができます。

・URLのリダイレクト(転送)

・アクセス制限(BASIC認証、IPアドレス制限)

・404エラーページのカスタマイズ

・キャッシュや圧縮の設定

なお、Nginxのサーバーでは.htaccessは使えません。その場合はサーバーの設定ファイルで指定します。

リダイレクトの種類(301と302の違い)については、こちらの記事で解説しています。

リダイレクトとは?301と302の違い・使い分けとSEOへの影響をわかりやすく解説リダイレクトとは何かを初心者向けにわかりやすく解説。301リダイレクトと302リダイレクトの違いと使い分け、リダイレクトが必要になる主なケース、設定方法とSEOへの影響・注意点までまとめました。...

.htaccessを編集する前の注意点

.htaccessは記述を1文字間違えるだけで、サイト全体が表示されなくなる(500エラー)ことがあります。
編集前には必ず元のファイルのバックアップをとっておきましょう。

また、WordPressの場合は「# BEGIN WordPress」〜「# END WordPress」の間はWordPressが自動で書き換えるため、リダイレクトの記述はその上(ファイルの先頭側)に書くのが安全です。

.htaccessのリダイレクトの書き方

以下のコードの「example.com」「new-example.com」は、ご自身のドメインに置き換えてください。

1. ドメイン変更に伴うリダイレクト(パスはそのまま)
「https://example.com/〇〇」へのアクセスを「https://new-example.com/〇〇」へ301リダイレクトします。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^(.*)$ https://new-example.com/$1 [R=301,L]

 

2. ページ単位のリダイレクト(同一ドメイン)
「/aaa.html」へのアクセスを「/bbb.html」へ301リダイレクトします。

RewriteEngine On
RewriteRule ^aaa\.html$ /bbb.html [R=301,L]

シンプルな転送なら、mod_rewriteを使わずに次のように書くこともできます。

Redirect 301 /aaa.html /bbb.html

 

3. ディレクトリ単位のリダイレクト(同一ドメイン)
「/old/」以下へのアクセスを「/new/」以下へ301リダイレクトします。

RewriteEngine On
RewriteRule ^old/(.*)$ /new/$1 [R=301,L]

 

4. 特定のディレクトリをリダイレクトから除外する
サイト全体を転送しつつ、「/keep/」ディレクトリだけは転送しない場合の書き方です。

RewriteEngine On
RewriteCond %{REQUEST_URI} !^/keep/
RewriteRule ^(.*)$ https://new-example.com/$1 [R=301,L]

 

5. www有り・無しを統一する
「www」ありのURLと「www」なしのURLが混在していると、評価が分散する可能性があります。どちらか一方に統一しましょう。

wwwありに統一する

RewriteEngine On
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

 

wwwなしに統一する

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

 

6. SSL化に伴い「https://」にリダイレクトする

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

※「%{HTTPS}」の中にスペースを入れると正しく動作しないので注意しましょう。
※サーバーやCDNの構成によっては、この書き方でリダイレクトがループすることがあります。その場合はレンタルサーバーの管理画面にある「常時SSL化」の設定を使うのがおすすめです。

 

7. https化とwww統一をまとめて行う

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

リダイレクトを1回で済ませられるので、表示速度の面でも有利です。

リダイレクト後の確認方法

設定が終わったら、次の点を確認しましょう。

・旧URLにアクセスして、新URLに正しく転送されるか

・ステータスコードが「301」になっているか(Chromeの開発者ツールの「ネットワーク」タブなどで確認できます)

・リダイレクトが何度も繰り返されていないか

ドメイン変更の場合は、Google Search Consoleの「アドレス変更ツール」もあわせて使いましょう。

まとめ

リダイレクトは、これまで積み上げてきたSEO評価を引き継ぐための大事な作業です。

・編集前に必ず.htaccessのバックアップをとる
・恒久的な移転は301リダイレクトを使う
・設定後はステータスコードとループの有無を確認する

.htaccessが使える環境であれば難しい作業ではないので、ぜひ活用してみてください!