URLのhttps化とwww無しをまとめてリダイレクトさせる設定

Filed under: .htaccess — kdcs @ 25年12月16日 火曜日

.htaccessでSSL化のためにリダイレクトの設定をしているURLがwww付きだった場合に、このURLをwww無しにするリダイレクトを追加すると別々に記述してしまうと2回リダイレクトが発生してしまうことがあるため、まとめて1回の処理で終わらせる設定。

まとめた記述

<IfModule mod_rewrite.c>
RewriteEngine On

# HTTPS + www除去をまとめて処理
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
</IfModule>

解説
RewriteCond %{HTTPS} off [OR] → HTTPSでない場合にマッチ。
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] → ホスト名が www. で始まる場合にマッチ。
RewriteRule ^(.*)$ https://%1/$1 [R=301,L] → %1 は (.+) のキャプチャ部分(つまり www. を除いたドメイン名)。 → これで「http://www.example.com」でも「http://example.com」でも、最終的に https://example.com/ に一発で飛ぶ。

メリット
リダイレクトは 1回だけ → 無駄なチェーンが発生しない。
記述がシンプル → 管理しやすい。
SEO的にも最適 → 正規URLに直接到達できる。

別々の記述

<IfModule mod_rewrite.c>
RewriteEngine On

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

# --- www除去 ---
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
</IfModule>

サイト内検索

カテゴリー

最近の投稿

« |URLのhttps化とwww無しをまとめてリダイレクトさせる設定| »
↑上に戻る