这对于 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]
但是,如果您在 www.site.com 上有一些新的“虚拟” URL,它们与文件系统上的文件不直接对应,那么您将必须弄清楚如何从重定向规则中过滤掉它们(否则您会得到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]