.htaccessでhttps化かつwwwなしに統一する。さくらインターネット版
ドメインの正規化をサクラインターネットでしてみたので、いつも忘れちゃうのでメモに残してますって話です。
材料はこう
1)www あり or www なし
2)SSLあり or SSL なし(http or https)
今回は、ドメインを簡単にしたいのと、SSLで統一したいので最終的に上記のいずれの指定で飛んできても、wwwなしでhttps にしたい。
ドメインの正規化のルールを決める
つまりドメインが下記のいずれであっても
1)http://hogehoge.com
2)https://hogehoge.com
3)http://www.hogehoge.com
4)https://www.hogehoge.com
すべて(1)「http://hogehoge.com」にしたいというものです。
「.htasscess」 を設定する
さくらインターネットの場合、テキストで作成することになります。
ドメイン直下フォルダに「.htaccess」ファイルをFTPか何かでアップロードします。
※拡張子的に「.htaccess」というファイル名は作成できない環境の場合、アップロードしてからFTP内でリネームします。
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</IfModule>
上記が完成したものです。ドメイン名事態を変数で格納してるので、この書式が書ける環境であれば、汎用的に利用(コピペ)できます。
RewriteEngine On
Rewrite機能を有効にします。Rewrite機能とは、アクセスのあったURLを、正規表現で書き換えてから処理する機能
RewriteCond
RewriteCondはRewriteRuleを実行するための条件を定義するための記述です。「RewriteCond条件」に合致した場合に、3行目の「RewriteRule」を実行します。
%{HTTP_HOST} ^www\.(.*)$ [NC]
正規表現の表記がいくつかありますが、「http://www.hogehoge.com」を例に例えるとすると・・・
%{HTTP_HOST} が ホスト名(www.hogehoge.com)が変数として取得して格納されます。
「\.」は「.」に対してエスケープ文字。(¥マークの半角、もしくはバックスラッシュと同等の文字)
「(.*)」は「任意の0文字以上の文字」
ここで「()」を使用しているのは、RewriteRuleの後方参照で「%1」で使用するためです。
「$」は正規表現の行末
[NC]は「大文字小文字を区別しない」という意味
つまり、www部分が、WWWでもWwWでも同意という意味になります。
RewriteRule
RewriteCondの条件に当てはまった場合は、RewriteRuleを実行します。
具体的には次の行になります。
^(.*)$ https ://%1/$1 [R=301,L]
^(.*)$ の「^」は行頭、「(.*)」は「0文字以上の任意の文字
カッコで囲っているのは、あとで$1で使用するためです
「$」が行末という意味
(https://%1/$1)で、wwwなしのアドレスに変更(リライト)してます。
%1には直前のRewriteCondの(.*)で取得したホスト名(www.hogehoge.com)
$1にはページ名が入ります。(ここではwww なしのURLに変更するという指示になります)
[R=301,L]
R=301は、「301リダイレクト」することを意味します。Lとは、「RewriteCond」の条件にあてはまった書き換えルールはこの「RewriteRule」で終わり、ということを意味します。
RewriteCond
RewriteCondはRewriteRuleを実行するための条件を定義するための記述です。条件が一致した場合次の行を実行します。
%{HTTPS} !on
onに否定の意味の「!」がついているので、その逆説になります。
RewriteRule
RewriteCondの条件に当てはまった場合は、RewriteRuleを実行します
(.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
(.*)は正規表現「0文字以上」を意味します。アドレス全体を対象としてます。
Webのお仕事、元phpプログラマ、今主にWebディレクタ、たまにエンジニア、UXディレクタ、LTのネタ探ししてます。