見出し画像

.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のネタ探ししてます。