0

这是我的问题的描述

我已经从这条路径移动了网站

http://www.site.com/any-thing-here-workfine

像这样子域

http://portal.site.com/any-thing-here-workfine

但是到现在,谷歌有我以前的链接,所有这些链接都挂了

因此,如果此页面返回未找到,我现在正在努力将此向下链接从 www 移动到子域

意思是

我在谷歌的链接仍然

http://www.site.com/any-thing-here-workfine 此页面未找到

所以我想将它 301 重定向到相同的 url 但喜欢 thia

http://portal.site.com/any-thing-here-workfine

我怎样才能做到这一点 ?

4

1 回答 1

4

这对于 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]
于 2012-10-18T22:53:18.483 回答