WordPressのURL正規化を.htaccessで行う方法【HTTPS・www・index対応】

WordPress
スポンサーリンク

同じページが「http/https」「wwwあり/なし」「index.phpあり/なし」で表示されるときは、正規URLを1つに決めて301リダイレクトします。

この記事では、Apacheで動くWordPressサイトの.htaccessに記述する例を紹介します。例では正規URLをhttps://example.com/(wwwなし)とします。

作業前に必ず.htaccessをバックアップしてください。記述ミスがあるとサイトへアクセスできなくなる場合があります。まず一時リダイレクトの302で確認し、問題がなければ301へ切り替えると安全です。

本記事の執筆者:マサトラ

フリーランス歴4年のWebエンジニア。現在は20社以上のWeb制作会社社様と提携し、WordPress構築やLP制作を中心に月3~5件のペースでサイト制作を手がけています。
このブログでは、実務で得た知識やノウハウ、制作現場での気づきを、フリーランスとして活動中の方はもちろん、これからWeb制作を仕事にしたいと考えている方にも役立つよう発信しています。

スポンサーリンク

URL正規化とは

URL正規化は、内容が同じ複数のURLを代表となる1つのURLへ統一することです。たとえば次のURLを、すべてhttps://example.com/へ転送します。

  • http://example.com/
  • https://www.example.com/
  • https://example.com/index.php

リダイレクトは利用者と検索エンジンを正規URLへ移動させます。HTMLのcanonical指定とは役割が異なるため、アクセスさせたくない重複URLにはリダイレクトを使います。

事前に確認すること

  • WebサーバーがApacheで、mod_rewrite.htaccessが利用できる
  • WordPressの「サイトアドレス」が正規URLになっている
  • wwwあり・なしの両方がDNSとSSL証明書の対象になっている
  • サーバー管理画面やCDNですでに同じ転送を設定していない

Nginxでは.htaccessを使用しません。また、Cloudflareなどのリバースプロキシ配下では%{HTTPS}の判定が環境によって異なり、設定を重ねるとループする場合があります。その場合はサーバーまたはCDNの機能で正規化してください。

スポンサーリンク

.htaccessへ追加するコード

次のexample.comを実際の正規ドメインへ置き換えます。正規化ルールは、WordPressが自動管理する# BEGIN WordPressより前に追加してください。マーカーの内側はWordPressによって上書きされることがあります。

RewriteEngine On

# /index.html、/index.htm、/index.php を削除し、正規URLへ転送
RewriteCond %{THE_REQUEST} \s/+(.*/)?index\.(?:html?|php)(?:[?\s]) [NC]
RewriteRule ^(.*/)?index\.(?:html?|php)$ https://example.com/$1 [R=301,L,NE]

# HTTPSかつwwwなしの正規ホストへ統一
RewriteCond %{HTTPS} !=on [OR]
RewriteCond %{HTTP_HOST} !^example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [R=301,L]

転送先には%{HTTP_HOST}ではなく、正規ドメインを直接記述します。これにより、意図しないHostヘッダーを転送先へ反映しません。

wwwありを正規URLにする場合は、コード内の転送先をhttps://www.example.comへ変更し、ホスト条件を!^www\.example\.com$に変更します。

編集と動作確認の手順

  1. サーバーのファイルマネージャーまたはSFTPで、WordPress直下の.htaccessをダウンロードして保存する
  2. バックアップを複製し、上記コードのドメインを書き換える
  3. # BEGIN WordPressより前にコードを追加してアップロードする
  4. シークレットウィンドウやcurl -Iで各URLのステータスとLocationを確認する
curl -I http://example.com/
curl -I https://www.example.com/
curl -I https://example.com/index.php

レスポンスが301で、Locationが意図した正規URLになっていることを確認します。リダイレクトが何度も続く場合や500エラーになった場合は、すぐに元の.htaccessへ戻してください。

まとめ

  • 正規URLを先に1つ決める
  • 転送先ドメインは明示し、WordPress管理マーカーの外へ記述する
  • バックアップを取り、各URLのステータスと転送先を確認する

構文やサーバーごとの差異は、Apache HTTP Server公式のリダイレクト解説も確認してください。

スポンサーリンク