ssl http https への301での転送設定及び、wwwあり なしの統一設定 .htacccess

htaccessによるURL正規化

www有無、index.htmlやindex.phpなどの有無、httpとhttpsなどをhtaccessで統一すること出来ます。

たとえば、

統一種類 URL1 URL2 URL1とURL2を統一
www統一 http://www.qualia999.jp http://qualia999.jp http://www.qualia999.jp
index統一 http://www.qualia999.jp/index.html http://www.qualia999.jp http://www.qualia999.jp
http統一 http://www.qualia999.jp https://www.qualia999.jp https://www.qualia999.jp

URL正規化の構文サンプル

「www」ありなしの統一

構文例1 (構文説明

「http://qualia999.jp/~」の場合、「http://www.qualia999.jp/~」に変更する
「https://qualia999.jp/~」の場合、「https://www.qualia999.jp/~」に変更する

# === wwwありに統一 ================================
RewriteEngine on
RewriteCond %{HTTP_HOST} ^qualia999\.jp
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://www.qualia999.jp/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^qualia999\.jp
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ https://www.qualia999.jp/$1 [R=301,L]
構文例2 (構文説明

「http://www.qualia999.jp/~」の場合、「http://qualia999.jp/~」に変更する
「https://www.qualia999.jp/~」の場合、「https://qualia999.jp/~」に変更する

# === wwwなしに統一 ================================
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.qualia999\.jp
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ http://qualia999.jp/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.qualia999\.jp
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ https://qualia999.jp/$1 [R=301,L]

「index」なしの統一

構文例1 (構文説明

「http://qualia999.jp/index.hrml」の場合、「http://qualia999.jp/」に変更する
「https://qualia999.jp/index.html」の場合、「https://qualia999.jp/」に変更する

# === index.htmlなしに統一 ================================
RewriteEngine on
RewriteCond %{THE_REQUEST} ^.*/index\.(html|php|cgi)
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)index\.(html|php|cgi)$ http://qualia999.jp/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^.*/index\.(html|php|cgi)
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)index\.(html|php|cgi)$ https://qualia999.jp/$1 [R=301,L]

「http」「https」の統一

構文例1 (構文説明

「http://qualia999.jp/~」の場合、「https://qualia999.jp/~」に変更する
→ 強制的に「https」(暗号化)通信に変更する

# === httpsに統一 ================================
RewriteEngine on
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
構文例2 (構文説明

「https://qualia999.jp/~」の場合、「http://qualia999.jp/~」に変更する
→ 強制的に「http」通信に変更する

# === httpに統一 ================================
RewriteEngine on
RewriteCond %{SERVER_PORT} 443
RewriteRule ^(.*)$ http://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

ページTOP

構文解説

RewriteEngine
「 RewriteEngine  on 」

Rewrite機能を使用するかの指定を行います。

ON : 使用する
OFF : 使用しない

RewriteBase
「 RewriteBase / 」

「Rewrite機能」のベースパスを指定します。

RewriteCond 「RewriteRule」の実行条件を指定します。

環境変数を使用できるため、多くの要素を判断材料として使用できます。
スマートフォンの判定なども一般的にこの機能が利用されます。
比較部分(上記サンプルの「80」部分)は正規表現で指定します。


「 RewriteCond  %{HTTP_HOST}  ^qualia999\.jp 」

上記は「HTTP_HOST」を参照し「qualia999.jp」で始まっている判定をしています。
→ 「http://qualia999.jp~」にアクセスがあったと判断できます。


「 RewriteCond  %{SERVER_PORT}  80 」

上記は「SERVER_PORT」を参照し「80」との一致を判定しています。
→ 80ポートにアクセスがあった(httpで通信)と判断できます。


「 RewriteCond %{THE_REQUEST} ^.*/index\.(html|php|cgi) 」

上記は「THE_REQUEST」を参照して次のページで終わっているかを判定しています。
「/index.html」「/index.php」「/index.cgi」
→ デフォルトページの判定(サーバの設定により異なります)

RewriteRule 転送ルールが記載されていることを表します。

RewriteRule  ^(.*)$  http://www.qualia999.jp/$1  [R=301,L]
+---①----+  +-②-+  +--------③---------+  +---④---+

②はリダイレクト(転送)する、条件を正規表現で指定します。
上記サンプルでは「^(.*)$」を指定し、すべてのアクセスを対象としています。

③は転送先のURLを指定します。
サーバ内のパスではなく「http」「https」から始まるURLで指定します。

④はオプションを指定します。通常は以下を使用します。

「R」:返却するhttpステータスを指定。「R」のみは302扱いとなります
「F」:条件に該当したら以下のRewriteRuleを無視することを表します

httpステータスコードを指定します。よく利用されるのは以下となります。

301 : Moved Permanently (完全に移動した)
302 : Moved Temporarily (一時的に移動した)
303 : See Other (他の場所にある)
410 : Gone (削除されている)

一般的には、
ページを移動した場合は「301」を使用
メンテナンスなどで一時的に移動したときは「302」を使用

2018/8/31

共通エリア