mod_vhost_aliasとmod_rewriteの併用

Posted by joeartsea on 2009-03-16

mod_vhost_aliasでサブドメイン動的生成はサブドメイン運用の負担を軽減します。

1
2
3
4
5
6
7
8
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
    ServerAlias *.example.com
    VirtualDocumentRoot /home/%2/public_html/%1
    ErrorLog logs/example.com-error_log
    CustomLog logs/example.com-access_log common
</VirtualHost>

ではexample.comへのアクセスをwww.example.comにリダイレクトするにはどうしたらいいのでしょうか?ServerAliasではexample.comとwww.example.comで同じものを表示するという設定になってしまうのでSEO的にあまりよろしくありません。こういった場合はmod_rewriteを併用します。

mod_vhost_aliasのVirtualDocumentRoot指定はそのままで、example.comへのアクセスはwww.example.comにリダイレクトするという条件をmod_rewriteで以下のように書きます。

1
2
3
4
5
6
7
8
9
10
11
<VirtualHost *:80>
ServerAdmin [email protected]
ServerName example.com
ServerAlias *.example.com
VirtualDocumentRoot "/home/%2/public_html/%1"
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule ^(.*)$ http://www.%0$1 [R=301,L]
ErrorLog logs/example.com-error_log
CustomLog logs/example.com-access_log common
</VirtualHost>