.htaccessでwwwあり・なし、http・httpsの統一をコピペできる汎用的な記述方法にする。
先日、別のWebサイトのhttps化を実施し、.htaccessファイルを利用してwwwあり・なし、http・httpsの統一を行いました。
その際、これまでは.htaccessファイルにそのサイトのドメイン名を直接記述していたのですが、他のサイトでも汎用的にコピペするだけで利用できるような記述方法ができないかと調べたところ、案外簡単にできました。
その記述方法を紹介します。
.htaccessファイルの転送の記述
まず、.htaccessファイルを使用するには、Apache HTTP Server(Webサーバー)でmod_rewriteモジュールが有効になっている必要がありますが、ほとんどのレンタルサーバーでデフォルトで使用できるようになっています。
そして、URL書換と転送の記述は以下のようになっています。
RewriteCond %変数名 条件 [フラグ]
RewriteRule URL書換&転送の記述
RewriteCondに記述した条件に合致したとき、RewriteRuleに記述したURL書換と転送が実行されます。
RewriteCondを複数行記述すればAND条件となり、複数行にフラグ[OR]をつければOR条件となります。
wwwあり・なし、http・httpsを統一する汎用的な記述
では早速、wwwあり・なし、http・httpsの統一の汎用的な記述方法ということで、.htaccessファイルに以下のように記述します。
ドメイン名を記述していないので、別サイトへ設定する場合もコピペでOKです。
<ifmodule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
RewriteRule ^(.*)$ https://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</ifmodule>
1行目、7行目は、mod_rewriteモジュールが有効かどうか判定する条件式となっており、有効であることが間違いないのであればなくてもOKです。
2行目が、Rewrite機能を使用するのでオンに。
3~4行目が、wwwなしに統一、5~6行目が、httpsに統一する記述です。
wwwあり・なしの部分
個別に簡単に説明すると、RewriteCondの「(.*)」とRewriteRuleの「%1」がポイントとなっています。
RewriteCondでカッコを使って一致した値は、RewriteRuleで変数%X(一致した順に連番)を利用して参照することができるため、この転送の記述で「https://www.mydomain.com/」は「https://mydomain.com/」のようにwwwなしに転送されます。
- %{HTTP_HOST} … サーバーのホスト名が
- ^www\.(.*) … www.から始まる場合
- [NC] … 大文字・小文字区別せず(これは無しでもよいかと)
- https://%1%{REQUEST_URI} … httpsのURLへ転送
- [R=301] … レスポンスコード「301」(恒久的に転送)
- [L] … 直後に続くRewriteRuleを実行しない
なお、wwwありに統一する場合は、以下のように記述します。
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
http・httpsの部分
こちらは特にポイントとなるようなところはありません。
- %{HTTPS} off … httpsでのアクセスではない場合
- https://%{HTTP_HOST}%{REQUEST_URI} … httpsのURLへ転送
なお、https化が必須になってきている流れもありますので、httpに統一する場合は省略します。
最後に
.htaccessファイルの記述内容について調べていたら、かなりいろんな細かいことができるんだなという印象でした。
コピペで済ませるところはさっさと済ませて、何をしているかはざっくりと理解しておけばいいかなぁと思います。
コメント