Webサイト運営をしていると、ある時気づくのが、
www付きアドレスと、wwwなしアドレス、両方からアクセスがありえる
ということ。
たとえばこのサイトは
freelifetech.com
でも
www.freelifetech.com
でも、アクセスされる可能性があるということ。
wwwのあり・なしそれぞれのアドレスは、ドメインを購入し、DNSサーバーへ登録した時点で、両アドレスとも紐付いたIPへ飛ばすようにDNSが設定されています。よって、両方のアドレスとも、このwebサーバーソフトウェアが稼働しているサーバーマシンまでは、解決されているということ。そのうえで、実際にWebサイトが表示されるかどうかは、そのWebサーバーソフトの設定次第、ということになります。
参考:wwwありとなしはどっちがいい? サブドメインは0円? DNSサーバの疑問を一挙解決
そこで、Webサーバーソフトの設定の仕方のお話。
ボクの環境、VPS(Virtual Private Server)、WebサーバーソフトはApache、VirtualHostによる複数ドメイン管理を利用、という場合の設定方法をお話していきます。VPSやVirtualHostを使わなくても大きくは変わらないと思いますが。
設定方法いくつか
ということで、wwwあり、なしでも正常に動作する方法をご紹介するんですが、まぁまずは
Googleせんせーおしえて!「www あり なし 設定」
なんてすると、いくつか方法が出てくるんですよね。
それらの方法がまぁまぁとっちらかっている。もっと簡単にできるんじゃないか?って方法を紹介していたり、無駄に2つの手法が併用されていたり・・。
レンタルサーバー向けとVPS向けでできる範囲が異なるので設定方法違うとか色々あるにはあるんですが。それにしても、バシっと答えを得にくかったので、今回調べた内容と自分の結論を備忘録&共有しようっていゆうのが今回の趣旨。それらが以下となります。
※かといって自分がWebサーバー(Apache)の知識が詳しいわけではないので、あくまで当サイトの結論ということで御覧ください。
手法1.ServerAlias
VirtualHost設定にServerAliasを設定することで、指定した名前のアドレスからもそのVirtualHostのウェブページへつなぐことができます。
具体的な書き方がこちら。
<VirtualHost *:80>
ServerName freelifetech.com
ServerAlias www.freelifetech.com
...
</VirtualHost>
「ServerAlias www.freelifetech.com」の一行が通常設定に追加された形です。これにより、www.freelifetech.comへのアクセスも、freelifetech.comの名前としてのアクセスとして扱われるわけです。
急に結論ですが、VirtualHost利用時のwwwあり・なしのアドレスまとめの書き方はこれが最もシンプルで、こう書くべきです。
これ以降はもはやただの参考情報なので気になる方だけどうぞ。
参考
Apacheの公式ドキュメントがこちら。
名前ベースのバーチャルホスト#serveralias
また以下のサイトも参考にさせて頂きました。
www有りもwww無しも同じディレクトリを表示させるバーチャルホスト
手法2.VirtualHost設定を定義してRedirect
ホストの設定にwww側でアクセスされた場合のRedirect設定を行うやり方です。
リダイレクト設定により、クライアントから特定アドレスに要求が来ても、リダイレクト先へクライアントに要求し直させることが可能です。これにより、一方のアドレスに限定できます。
具体的には、VirtualHost設定のファイルに以下を追加します。
<VirtualHost *:80>
ServerName www.freelifetech.com
Redirect permanent / https://freelifetech.com/
...
</VirtualHost>
permanentとすることで、ページは永久に移動したことを意味するリダイレクトステータス (301) を返します。
つまり、別のfreelifetech.comとは別に、www.freelifetech.com用のVirtualHost設定を追加し、そこにRedirect設定を書いています。
こちらでももちろんやりたいことは実現できていますが、一言でいえば冗長です。
結局VirtualHost設定が多重になっているのがいただけませんね。
これと似た方法で、wwwあり・なし両方でもとにかく問題なく同じサイトを表示させるのが以下の書き方。
Redirect設定のApache公式マニュアルはこちら
Redirectによる設定はこちらを参考にしました。
「www あり」「www なし」を 301 リダイレクトで統一する設定方法まとめ (Apache, pound)
手法3.ただのVirtualHost設定の再定義
手法2と似てますが、これは完全なる悪手。なので興味のない方以外は読み飛ばしましょう。
<VirtualHost *:80>
ServerName www.freelifetech.com
...
</VirtualHost>
という設定をまんまwwwなし版と同じで書く。
これがよくないのは、結局アドレスが「www.freelifetech.com」のまま、つまりwwwつきで扱われているということですね。
これは、SEO的にも別サイト的な扱いとみなされよくないといわれます。
手法4.mod_rewrite
最後にあげてますが、上の感じで検索すると一番目についたのがこの手法でした。
<VirtualHost *:80>
ServerName freelifetech.com
...
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.freelifetech\.com$
RewriteRule ^/(.*) https://freelifetech.com/$1 [R=301,L]
</VirtualHost>
Apacheのmod_rewiteモジュールの機能を使ってリダイレクト。しかもその判定に正規表現を使ってがんばってあげる。
とにかく、最初にこれを見たときに「すべてのサイトにこんなことしなきゃ解決できないことのなの?」って甚だ疑問に思ってしまって、いくつか調べるうちに、こんな記事を書くに至ったというところです。
しかも、この設定を.htaccessに書きましょう、なんて紹介も多かったです。.htaccessは、ディレクトリ単位で処理を変更するための設定ファイルで、こんな根っこの設定を書くべきものでは本来ないと考えています。レンタルサーバーを使ったことがないので、コンフィグファイルがいじれない等の事情がある場合はしょうがないでしょう。しかし、VPSのようにコンフィグファイル(httpd.conf)をいじれる場合、そちらに設定を追記しましょう。(設定方法はもちろんServerAlias一行で済ませましょう。)
その他
参考程度に、SEO対策、すなわちGoogleへ両サイトが同じであると認識させる設定もGoogleWebマスターツールから可能なようです。
SEOが大事な人は、上記のサーバーソフト設定に加えて、念のため設定しておくと良いかもしれませんね。
まとめ
以上、wwwありなしどうするんやってところから、ドメインネーム解決について調べてみた内容の簡単なまとめでした。
コメント
wwwありでも無しでもアクセスできる設定を探しているのに、見つかるのはまさに.htaccessでURL Rewriteで一方に片寄せするものばかりでコレジャナイわけでしたが、非常に助かりました。
書かれているとおりで、Web(ホームページ??)系のノウハウの多くは、レンタルサーバ等のつまりはApacheやIISとかの設定を「直」に触れないベースで書かれているものがかなりを占めているので、このようなものばかりがひっかかってしまうんでしょうね。