.htaccessの書き方完全ガイド|URL正規化(www統一・https化)をサーバー別に徹底解説

読者さん
読者さん

サイトのURLが「wwwあり」「wwwなし」でバラバラなんだ…。
https://にも統一したいし、URLの最後にindex.htmlが付くのも気になる…。

ロベルト
ロベルト

その悩み、よくわかります。大丈夫、.htaccessファイルを使えばすべて解決できます。サイトの評価を守るためにも、URLは1つに統一(正規化)することが重要です。

サイトを運営していると、URLの表示が統一されていないことに気づくことがあります。これはSEO(検索エンジン最適化)の観点から見ても、あまり良い状態ではありません。

こんな悩みを解決できます

サイトのURLが「wwwあり・なし」で混在している

「http」と「https」の両方でアクセスできてしまう

URLの末尾に「index.html」や「index.htm」が表示される

どのサーバーでどう書けばいいかわからない

この記事では、ウェブサーバーの設定ファイルである「.htaccess」を使って、これらの問題を解決する方法を具体的に解説します。サーバーごとのケースに合わせてコピペで使えるコードを多数紹介するので、初心者の方でも安心です。

この記事でわかること
  • .htaccessによるURL正規化の基本
  • 【wwwあり/なし】URLを統一する書き方
  • 【index.html/htm】を非表示にする書き方
  • エックスサーバー・さくらインターネットなどサーバー別の設定例

.htaccessで行うURL正規化の3つの基本

URLの正規化とは、複数存在するURLを代表の1つにまとめることです。これにより、検索エンジンからの評価が分散するのを防ぎます。今回行う設定は、主に以下の3つです。

URL正規化の3つのポイント

1. httpsへの統一:通信を暗号化するhttpsに統一し、セキュリティを向上させます。

2. wwwのあり・なし統一:「www.example.com」と「example.com」のどちらかに統一します。

3. index.html(.htm)の非表示:「example.com/index.html」を「example.com/」のように見せます。

これらの設定を.htaccessファイルに記述することで、サイトにアクセスしてきたユーザーや検索エンジンを、あなたが決めた唯一の正しいURLへ自動的に転送(リダイレクト)させることができます。

【ケース別】コピペで使える.htaccessリダイレクトコード

ここからは、実際のサーバー環境や目的に合わせたコードを紹介します。ご自身の状況に最も近いものを選んで利用してください。

作業前に必ず確認!
  • 必ずバックアップを取る:作業前に必ず現在の.htaccessファイルをダウンロードするなどしてバックアップを保存してください。記述を間違えるとサイトが表示されなくなることがあります。
  • WordPressの場合:.htaccessファイルに# BEGIN WordPressから# END WordPressまでの記述がある場合、それよりも前の行に今回紹介するコードを追記してください。
  • 反映の確認:設定後はブラウザのキャッシュをクリアするか、シークレットモードでアクセスして確認しましょう。

ケース1:エックスサーバーで「wwwあり」に統一(index.html)

まず、ドメイン「example.com」を例に、wwwありのURLhttps://www.example.com/)に統一し、さらにindex.htmlを非表示にする設定です。

このコードは、エックスサーバーの環境で標準的に動作します。

<IfModule mod_rewrite.c>
RewriteEngine On

# ① httpからhttpsへのリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# ② wwwなしからwwwありへのリダイレクト
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# ③ /index.html を / にリダイレクト
RewriteRule ^index\.html$ / [R=301,L]

</IfModule>
ロベルト
ロベルト

コード内のドメイン部分(example.com)を、ご自身のドメイン名に書き換えて使ってくださいね。

ケース2:エックスサーバーで「wwwなし」に統一(index.html)

次に、ドメイン「example.com」のように、wwwなしのURL(例:https://example.com/)を正規のURLとする場合の設定です。

読者さん
読者さん

「wwwあり」でアクセスされたら、「wwwなし」のURLに自動で転送したいんだ。

この場合、②の記述を「wwwあり」から「wwwなし」へ転送するように変更します。以下のコードは「example.com」の例です。

<IfModule mod_rewrite.c>
RewriteEngine On

# ① httpからhttpsへのリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# ② wwwありからwwwなしへのリダイレクト
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# ③ /index.html を / にリダイレクト
RewriteRule ^index\.html$ / [R=301,L]

</IfModule>
メモ

古いサーバー設定に関する記述(#suPHP_ConfigPathなど)が.htaccessファイルに残っていることがありますが、これらはコメントアウト(行頭に#)されていれば動作に影響しないため、そのままで問題ありません。

ケース3:ファイル名が「index.htm」の場合(wwwあり)

サイトによっては、トップページのファイル名がindex.htmlではなくindex.htmの場合があります。その場合、リダイレクト元の指定を少し変更するだけで対応できます。

ここでは「example.com」を例に、wwwありに統一し、かつindex.htmを非表示にする設定を見ていきましょう。

<IfModule mod_rewrite.c>
RewriteEngine On

# ① httpからhttpsへのリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# ② wwwなしからwwwありへのリダイレクト
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# ③ /index.htm を / にリダイレクト
RewriteRule ^index\.htm$ / [R=301,L]

</IfModule>

注目すべきは③の部分です。RewriteRule ^index\.html$となっていた部分を、RewriteRule ^index\.htm$に変更しているだけです。とても簡単ですね。

ケース4:さくらインターネットのサーバーでの設定

さくらインターネットのサーバーでの設定方法です。

wwwあり・index.htmのサイトを例に解説します。

<IfModule mod_rewrite.c>
RewriteEngine On

# ① httpからhttpsへのリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# ② wwwなしからwwwありへのリダイレクト
RewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]

# ③ /index.htm を / にリダイレクト
RewriteRule ^index\.htm$ / [R=301,L]

</IfModule>

ケース5:エックスサーバーで「wwwなし」に統一(index.htm)

最後に、これまでの応用編として、エックスサーバーで「wwwなし」に統一し、かつファイル名が「index.htm」の場合の設定です。

これまでのパターンを組み合わせるだけなので、難しくありません。

<IfModule mod_rewrite.c>
RewriteEngine On

# ① httpからhttpsへのリダイレクト
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

# ② wwwありからwwwなしへのリダイレクト
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^(.*)$ https://example.com/$1 [R=301,L]

# ③ /index.htm を / にリダイレクト
RewriteRule ^index\.htm$ / [R=301,L]

</IfModule>

このように、②で「wwwあり→なし」の設定を、③で「index.htm」の非表示設定を記述すれば、ご希望の動作が実現できます。

【総まとめ】設定パターン一覧表

今回紹介した設定の組み合わせを、表にまとめました。ご自身のサイトがどのパターンに当てはまるか、最終確認にご利用ください。

正規URLファイル名サーバー主な設定内容
wwwありindex.htmlエックスサーバーRewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^index\.html$ / [R=301,L]
wwwなしindex.htmlエックスサーバーRewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^index\.html$ / [R=301,L]
wwwありindex.htmエックスサーバーRewriteCond %{HTTP_HOST} ^example\.com$ [NC]
RewriteRule ^index\.htm$ / [R=301,L]
wwwなしindex.htmエックスサーバーRewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^index\.htm$ / [R=301,L]
wwwありindex.htmさくらインターネットRewriteCond %{HTTPS} off で動かない場合は
RewriteCond %{ENV:HTTPS} !on を試す。

.htaccessのよくある質問

WordPressの記述(# BEGIN WordPress…)は消していいですか?
絶対に消さないでください。WordPressがサイトを正しく表示するための重要な記述です。今回紹介したコードは、必ず「# BEGIN WordPress」よりも前の行に記述してください。
サイトがエラーで表示されなくなりました!
慌てずに、作業前にバックアップした.htaccessファイルで上書きして、元の状態に戻してください。サイトが復旧したら、コピーしたコードに間違いがないか、特にドメイン名や記述場所を再度落ち着いて確認しましょう。

まとめ:URL正規化でサイトの信頼性を高めよう

今回は、.htaccessファイルを使ってURLを正規化する方法を、サーバーやケース別に詳しく解説しました。

3つのポイント

1. https化、www統一、index.html(.htm)非表示が正規化の基本。

2. サーバー環境によって記述方法が少し異なる場合がある。

3. 作業前には必ずバックアップを取り、慎重に作業する。

URLの正規化は、ユーザーの混乱を防ぎ、検索エンジンからの評価を一つに集約するために非常に重要です。この記事で紹介したコードを参考に、あなたのサイトの信頼性をさらに高めていきましょう。

ロベルト
ロベルト

.htaccessは強力な分、設定は慎重に!もし不安な場合は、詳しい人に相談するのも一つの手ですよ。