如何使用.htaccess避免双重谷歌索引?

时间:2011-04-16 09:55:52

标签: html .htaccess indexing robots.txt

我有一个网站,其根目录中有一个很好的RewriteRule,可以重定向所有这类查询:

http://domain.com/foo/parameter

http://domain.com/index.php?args=parameter

用户只能看到干净的网址,每个人都很高兴。

现在问题在于:domain.com DNS拥有domain.com的A记录,指向私有服务器IP,以及mail.domain.com的A记录,指向完全相同的IP。

由于某些未知原因,在过去几个月中,Google将我网站的所有网页(http://domain.com/foo/par1http://domain.com/foo/par2等)与另一套邮件子域({{1 },http://mail.domain.com/foo/par1等。)

我以为我可以摆脱所有这些请求将任何请求重定向到mail.domain.com/,无论是什么到domain.com,最终Google会理解所有那些带有'mail'子域名的页面都会重定向到主页,并且因此没有必要。

我在.htaccess中试过这个:

http://mail.domain.com/foo/par2

但是,这会重定向到一个看似如下的可见网址:RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC] RewriteRule ^(.*)$ http://domain.com [R=301,L] ,而我只想重定向到主页。

什么是正确的形式,是否有更优雅的方法来实现这一点,也许在robots.txt中添加一些东西? (请注意,我不能在这里禁止使用子文件夹)

2 个答案:

答案 0 :(得分:0)

您的规则是正确的,但您需要将其放在所有其他规则之前(RewriteEngine On之后),否则它将获取内部重写网址的最新状态。

更新:嗯,你说你的旧规则正确地重定向,但使用的是内部丑陋的URL。实际情况并非如此,除非您添加$1来挑选匹配的字符串。

RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]

答案 1 :(得分:0)

如果您只想通过丢弃原始REQUEST_URI和QUERY_STRING来重定向到主页,请使用以下规则:

RewriteCond %{HTTP_HOST} ^mail.domain.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/? [R=301,L]

通过将?放在最后,它将删除原始查询字符串,因此此类型的网址为:http://mail.domain.com/index.php?args=parameter将成为http://domain.com/