先日、さくらVPSに独自ドメインを設定しましたが、その独自ドメインへのwwwつきアクセスが表示されていなかったので、wwwサブドメインでも表示されるように&wwwなしドメインにリダイレクトする設定を追加しました。
近年の流れからドメインにはwwwをつけない運用で統一していました。もしアクセスがあっても、一般的なレンサバは自動的にwwwつきを設定してくれるので今までは特に意識していませんでしたが、VPSだと当然ながら自分で設定する必要がありました。
そもそもwwwって何だろう
独自ドメインの先頭にwwwのサブドメインがつくのは歴史的な意味合いが強く、そのドメインの中でWWW(ウェブ)を担当するよという意味があります。ftpとかmailがつくのと同じです。しかし近年ネットと言えばWWWなので省略されるようになりました。
慣習に従えばウェブページにはwwwをつけるべきで、歴史あるサイトの多くはwwwつきで運用されています。しかし近年のサービスは、ドメイン名は短いほうが何かと便利なので省略されるパターンが多いです。
近年のサービスであっても、wwwをつけたアクセスは一定数あるので、通常はどちらでアクセスされても表示されるように設定されます。これで人間的にはOKなのですが、SEO的には問題が発生します。
同じコンテンツがwwwあり・なしの複数URLからアクセスできてしまうので、被リンク効果が分散したり、重複コンテンツと判断される可能性もあります。
そのため、wwwあり・なしをどちらか一方に統一する301リダイレクトを行います。強制移動ですね。301リダイレクトはドメインの引越しにも使われる方法で、SEO的にも価値を引き継ぎます。
レンサバでは.htaccessで行なっていた
それではwwwなしに統一する301リダイレクトを行いたいと思います。先にレジストラのDNS設定でwwwつきアクセスも転送されるように設定しておきます。
リダイレクトは apache の mod_rewrite(モジュール・リライトとかモッド・リライトと呼びます)という機能を使って行います。
レンサバだとディレクトリ内の .htaccess に記述していた内容なんですが、VPSの場合は .htaccess の親玉である httpd.conf に直接記述できます。レンサバでは httpd.conf の代わりに .htaccess を利用していたんですね。
vimでhttpd.confを編集します
vim /etc/httpd/conf/httpd.conf
VirtualHost設定に4行追加します。ServerAliasには新たにwwwをつけたドメインを。これだけでwwwつきアクセスが表示されるようになります。さらにリダイレクトを行いたいので、mod_rewriteの記述を示すRewriteEngine onを。
mod_rewriteの詳しい説明は省きますが、ここでは「HTTP_HOST(アクセスされたホスト名)がwww.example.comなら、http://example.com/ に301リダイレクト」しています。ホスト名以降のディレクトリやクエリーは全て引き継がれます。
<VirtualHost *:80>
ServerAdmin info@example.com
DocumentRoot /home/(ユーザー名)/www/example.com
ServerName example.com
ServerAlias www.example.com
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com$
RewriteRule ^/(.*) http://example.com/$1 [R=301,L]
ErrorLog logs/example.com-error_log
CustomLog logs/example.com-access_log common
</VirtualHost>