ドメイン転送で結局 mod_rewrite を使った

SSL 付きのあるサイトのドメインを引っ越すことになりました。最初 mod_alias の機能である Redirect を使おうと思い,

NameVirtualHost *

<VirtualHost *:80>
ServerName old-domain.com
Redirect / http://new-domain.com/
</VirtualHost>

<VirtualHost *:443>
ServerName old-domain.com
Redirect / https://new-domain.com/
</VirtualHost>

<VirtualHost *:80>
ServerName new-domain.com
...
</VirtualHost>

<VirtualHost *:443>
ServerName new-domain.com
SSLEngine on
...
</VirtualHost>

みたくしたら,Apache に怒られてしまいました。NameVirtualHost は複数のポートにたいしてうまくないのです(あるポートに対してだけ名前によるバーチャルホスト,ということならできる)。

んー,困った。ということでこちらのサイトを参考に結局 mod_rewrite で対処することにしました。設定ミスったら怖いんで手を出したくなかったんですが。

#NameVirtualHost *  # disabled !

<VirtualHost _default_:80>
RewriteEngine on %{HTTP_HOST} ^old-domain\.com(:80)?
RewriteCond ^/(.*) http://new-domain.com/$1 [R=301,L]
</VirtualHost>

<VirtualHost _default_:443>
RewriteEngine on %{HTTP_HOST} ^old-domain\.com(:443)?
RewriteCond ^/(.*) https://new-domain.com/$1 [R=301,L]
</VirtualHost>

301 (Moved Permanently) で検索クローラにたいしてもよしなに,というところがミソらしいです。