
.htaccessとrewriteモジュールでURLの「www」のありなしを統一する方法
- Tips
wwwはあってもなくても良い。
まずそもそも、「www」はありの方がいいのか、なしのほうがいいのか。そんな疑問が浮かぶかもしれません。
「www」というサブドメインは「WorldWideWeb」の略称で、「HTML文書を公開しているWEBサーバですよ」ということを明示するための慣習です。なので、FTPサーバの場合だと「ftp.hogehoge.com」、メールサーバの場合だと「mail.hogehoge.com」など、用途をサブドメインで表していたんですね。
しかし、この「www」はあってもなくても特になにがあるというわけではありません。いまやWEBサイトは一般消費者の方々がだれれもアクセスし、閲覧します。皆さんも「wwwが付いてるからWEBサーバなんだ!」という意識でWEBサイトを見たりしませんよね。
なので、特に理由がないのであれば「www」を付ける付けないは正直、好みです。
ありなしは統一した方がいい
「www」の有無に意味合い的な差はないとしても、どちらかに統一はした方がいいです。「www.hogehoge.com」と「hogehoge.com」はドメイン名としては全く別物なので、アクセス解析上の問題や、SEO上の問題などが考えられるからです。アクセス解析では同一ホストとしての集計ができなかったり、SEOではそもそも別サイトとして認識されてしまうかもしれません。さらに、被リンクのURLもどちらになるか統一されない可能性がたかくなるので被リンクの評価にも影響しそうですよね。
なので、WEBサイトを公開した際はこの「www」の有無は統一したほうがいいでしょう。
.htaccsessとrewriteモジュールで「www」有無を統一する
前置きが長くなりましたが本題です。
.htaccsessとrewriteモジュールはいまや共有サーバなどでも利用可能なサーバが多くお手軽にアクセス設定ができるので使い方を覚えておいて損はありません。
「www」の有無を統一するには「.htaccess」というファイルをドキュメントルート直下に配置し、
「rewriteモジュール」の設定を記述するだけです。
「www」なしに統一する.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.hogehoge\.com$
RewriteRule ^(.*)$ http://hogehoge.com/$1 [R=301,L]
「www」ありに統一する.htaccess
RewriteEngine On
RewriteCond %{HTTP_HOST} ^hogehoge\.com$
RewriteRule ^(.*)$ http://www.hogehoge.com/$1 [R=301,L]
解説
流れとしては「リライトモジュールの有効化」→「アクセスされたホスト名をチェック」→「正規のホスト名でリダイレクト」というかんじです。
「RewriteCond %{HTTP_HOST}」で転送する条件を記述します。条件は正規表現で記述するために
「^」と「$」で評価する対象の文字列を挟みます。さらに、「.」は正規表現では任意の文字という意味になってしまうので、「\.」と表記します。
「RewriteRule」では「RewriteCond」に一致した際の挙動を記述します。
上記の「www」なしに統一の例では「www」がつかない、「http://hogehoge.com」へリダイレクトするという記述になっています。
ざっくりとした解説ですが、「hogehoge.com」の部分を自身のWEBサイトのドメインに書き換えて、設置してみてください。
サーバ仕様の確認は忘れずに
サーバによっては、「.htaccess」が利用できなかったり、利用できても設定できる内容に制限があったりします。
事前にサーバの仕様を確認すること忘れないでくださいね。