.htaccessを使ってURLを正規化する方法

この記事はGoogleのガイドライン「正規以外の URL には 301 リダイレクトを使用する」を実現する方法を解説しています。

個人ユーザーに人気のレンタルサーバー「ロリポップ」と、法人ユーザーに人気の「さくらインターネット」で動作検証しています。
その他のサーバーでは若干ファイルの内容が異なる可能性がありますが、.htaccessでURL書き換えができるサーバーだと動作すると思います。

URLの正規化とは

レンタルサーバーを借りると、レンタルサーバーのドメインが付与されることが多いと思います。
例えば、ロリポップの場合は「hoge.main.jp」、さくらインターネットなら「hoge.sakura.ne.jp」「www.hoge.sakura.ne.jp」といった感じです。

URLの正規化を行わないと別のURLで同じコンテンツが表示されるということが起きます。
このような事態は、SEO上マイナスです。

下記の例を参考に、自分のサイトをチェックしてみてください。
ポイントは「wwwあり・なし」「index.htmlあり・なし」でアクセスした際のアドレスバーの変化です。
異なるアドレスでアクセスしても、同一のURLに自動的に転送される場合は正規化が完了しています。
下記の例を参考に自分のサイトに異なるアドレスでアクセスしてみてください。同じ内容が表示される場合はこの記事を参考に「.htaccess」を用いてURLを統一しましょう。

http://独自ドメイン.jp/
http://www.独自ドメイン.jp/
http://□□□.ロリポップのドメイン.jp/
http://独自ドメイン.jp/index.html
http://www.独自ドメイン.jp/index.html
http://□□□.ロリポップのドメイン.jp/index.html

たとえばこのサイトの場合は下記のどのパターンでアクセスしても「http://www.ka-partner.tk」(wwwあり、index.htmlなし)へ転送されるように正規化しています。
http://www.ka-partner.tk/
http://www.ka-partner.tk/index.html
http://ka-partner.tk/
http://ka-partner.tk/index.html

設定ファイル(.htaccess)の作成方法

.htaccessは「UTF-8N(BOMなし)」で保存する。
わからない方は、#の行を削除してください。(日本語を使用しない)

OSやエディタによっては、ドットから始まる特殊ファイル「.htaccess」を作成できない場合があります。
その場合は「a.htaccess」などのファイル名で作成し、サーバーにアップロード後「.htaccess」にリネーム(名前を変更)します。

UTF-8Nで保存

設定ファイルの記述内容について

3つのケースを紹介しています。

ロリポップのドメイン/ディレクトリ=独自ドメインのケース(マルチドメイン設定ありのケース)

ロリポップのドメイン:□□□.mail.jp

独自ドメイン:example.jp

サーバーのルート(/)の.htacess

RewriteEngine On

# ロリポップのドメインを独自ドメインに転送
RewriteEngine On
RewriteCond %{HTTP_HOST} ^□□□\.main\.jp
RewriteRule (.*)$ http://www.example.com/$1 [R=301,L]

# www有りのURLに転送
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]

# index.html無しのURLに転送
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ http://www.example.com/$1 [R=301,L]

ロリポップのドメイン/ディレクトリ=独自ドメインのケース(マルチドメイン設定ありのケース)

ロリポップでマルチドメイン設定しているディレクトリ:□□□.mail.jp/△△△

独自ドメイン:example.jp

サーバーのルート(/)の.htacess

RewriteEngine On

# ロリポップでマルチドメイン設定しているディレクトリを独自ドメインに転送
Redirect permanent /△△△ http://www.example.com

独自ドメインのディレクトリのルートの.htaccess

RewriteEngine On

# www有りのURLに転送
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]

# index.html無しのURLに転送
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ http://www.example.com/$1 [R=301,L]

参考情報:ロリポップのマニュアル(URLの書き換え)

さくらの初期ドメイン=独自ドメインのケース

さくらの初期ドメイン:○○○.sakura.ne.jp
独自ドメイン:example.com

サーバーのルート(www)の.htaccessに下記を追加する。

RewriteEngine on

# さくらのドメインを独自ドメインに転送
RewriteCond %{HTTP_HOST} ^(www\.○○○\.sakura\.ne\.jp)(:80)?
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]

# さくらのドメインを独自ドメインに転送
RewriteCond %{HTTP_HOST} ^(○○○\.sakura\.ne\.jp)(:80)?
RewriteRule ^(.*) http://www.example.com/$1 [R=301,L]

# www有りのURLに転送
RewriteCond %{HTTP_HOST} ^example\.com
RewriteRule (.*) http://www.example.com/$1 [R=301,L]

# index.html無しのURLに転送
RewriteCond %{THE_REQUEST} ^.*/index.(html|htm|php)
RewriteRule ^(.*)index.(html|htm|php)$ http://www.example.com/$1 [R=301,L]

参考情報:さくらのマニュアル「wwwというホスト名の有無を統一する(上級者向け)」

設定ファイルをサーバーにアップロードする

設定ファイルが完成したらサーバーにアップロードします。
すでにサーバー上にファイルが存在する場合は、注意してください。
一旦サーバーのファイルをダウンロードし、今回の内容を追記したうえでアップロードするようにして下さい。

htaccessのアップロード

アップロード後は、パーミッションを変更します。
ロリポップの推奨パーミッションは「604」、さくらも「604」でOKです。
FFFTPの場合は、サーバー上のファイルを右クリックして「属性変更」から選択できます。
htaccessのパーミッションの変更

アップロード後の確認

アップロードが完了したら、wwwあり・なし、index.htmlあり・なし、レンタルサーバーのドメインなどでアクセスし、適切に転送されているか確認してみてください。

コメントを残す

メールアドレスが公開されることはありません。