よく使うhtaccess
cman.jp cman.jp > よく使うhtaccess > 解説・自動作成

htaccessによるURL正規化

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

たとえば、
統一種類URL1URL2URL1とURL2を統一
www統一http://www.cman.jphttp://cman.jphttp://www.cman.jp
index統一http://www.cman.jp/index.htmlhttp://www.cman.jphttp://www.cman.jp
http統一http://www.cman.jphttps://www.cman.jphttps://www.cman.jp
広告

URL正規化の構文サンプル

「www」ありなしの統一

構文例1 (構文説明

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

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

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

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

「index」なしの統一

構文例1 (構文説明

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

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

「http」「https」の統一

構文例1 (構文説明

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

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

「https://cman.jp/~」の場合、「http://cman.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}  ^cman\.jp 」

上記は「HTTP_HOST」を参照し「cman.jp」で始まっている判定をしています。
→ 「http://cman.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.cman.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」を使用

ページTOP

リダイレクト サンプル

以下のボタンでサンプルをご確認いただけます。

サンプル
ページTOP
広告
QrCode
このページのURL
スマートフォン・タブレット運営:株式会社シーマン