.htaccessサンプル:URLの正規化
.htaccess を使った URL 正規化を行うサンプルをご紹介します。 www なしを www ありへ正規化する方法、 index.html ありを index.html 無しへ 正規化する方法、 http へのアクセスを https でのアクセスへ正規化する方法についてそれぞれ解説します。
(Last modified: )
wwwなしをwwwありに正規化する
最初に www なしを www ありに正規化する場合です。 example.com を www.example.com へ正規化します。ドキュメントルートに設置した .htaccess で次のように記述します。
RewriteEngine on RewriteCond %{HTTP_HOST} ^example\.com$ RewriteRule ^(.*)$ //www.example.com/$1 [R=301,L]
実際に試してみます //example.com/blog/hey.html へアクセスします。
//www.example.com/blog/hey.html へリダイレクトされました。
逆に wwww ありを www なしに正規化する場合です。 www.example.com を www.example.jp へ正規化します。
RewriteCond %{HTTP_HOST} ^www\.example\.com$ RewriteRule ^(.*)$ //example.com/$1 [R=301,L]
実際に試してみます //www.example.com/blog/hey.html へアクセスします。
//example.com/blog/hey.html へリダイレクトされました。
index.htmlありをindex.htmlなしに正規化する
次に index.html ありでアクセスした場合に index.html なしへ正規化する場合です。 //www.example.com/dir/index.html を //www.example.com/dir/ へ正規化します。ドキュメントルートに設置した .htaccess で次のように記述します。
RewriteCond %{THE_REQUEST} ^.*/index\.html RewriteRule ^(.*)index.html$ //www.example.com/$1 [R=301,L]
index.html だけでなく index.php も同じように正規化する場合には次のように記述します。
RewriteCond %{THE_REQUEST} ^.*/index\.(html|php) RewriteRule ^(.*)index.(html|php)$ //www.example.com/$1 [R=301,L]
実際に試してみます //www.example.com/blog/index.html へアクセスします。
//www.example.com/blog/ へリダイレクトされました。
httpへのアクセスをhttpsでのアクセスに正規化する
次に http でのアクセスを SSL/TLS を使った https でのアクセスに正規化する場合です。 //www.example.com/ へのアクセスを //www.example.com/ へ正規化します。ドキュメントルートに設置した .htaccess で次のように記述します。
RewriteEngine on RewriteCond %{HTTPS} off RewriteRule ^(.*)$ //www.example.com/$1 [R=301,L]
逆に https でのアクセスを http でのアクセスに正規化する場合です。
RewriteEngine on RewriteCond %{HTTPS} on RewriteRule ^(.*)$ //www.example.com/$1 [R=301,L]
現在のテスト環境では試すことができませんが、他のサーバで同じ設定を行っている環境のテスト結果を参考までに記載します。 SSL/TLS なしの //www.example.com/ へアクセスします。
SSL/TLS ありの //www.example.com/ へリダイレクトされました。
-- --
.htaccess を使った URL 正規化を行うサンプルをご紹介しました。
( Written by Tatsuo Ikura )

著者 /
プログラミングや開発環境構築の解説サイトを運営しています。