これは mod_rewrite の場合は非常に簡単です
RewriteEngine On
RewriteCond %{HTTP_HOST} =www.site.com [NC]
RewriteRule ^/?(.*) http://portal.site.com/$1 [R=301]
それはすべてをリダイレクトします。しかし、www.site.com に新しいコンテンツを投稿して、それをリダイレクトしたくない場合はどうすればよいでしょうか?
www.site.com に静的コンテンツがあるだけなら、簡単です。存在しないファイル/フォルダーの「404」テストを追加するだけです。
RewriteEngine On
RewriteCond %{HTTP_HOST} =www.site.com [NC]
# 404 test -- file/folder exists?
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/?(.*) http://portal.site.com/$1 [R=301]
ただし、ファイルシステム上のファイルに直接対応しない新しい「仮想」URL が www.site.com にある場合は、これらをリダイレクトルールから除外する方法を理解する必要があります (そうしないと、 404 テストでの誤検知)。たとえば、リダイレクトしないwww.site.com の仮想コンテンツがすべて /newsite/... で始まるとすると、次のようになります。
RewriteEngine On
RewriteCond %{HTTP_HOST} =www.site.com [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/?newsite/
RewriteRule ^/?(.*) http://portal.site.com/$1 [R=301]