htaccess:如果找不到页面,则重定向到子域

时间:2012-10-18 17:15:07

标签: .htaccess mod-rewrite redirect seo

此处有关于我的问题的说明

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

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

像这样的子域名

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

但到目前为止,谷歌已经使用了我以前的链接,所有这些链接都已关闭

所以我现在正在努力将此链接从www移动到子域名(如果此页面返回未发现)

平均数

我在Google中的链接仍然是

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

所以我想将它重定向到相同的网址,但是像thia一样

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

我该怎么做?

1 个答案:

答案 0 :(得分: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]