我有一个网站,其根目录中有一个很好的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/par1
,http://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中添加一些东西? (请注意,我不能在这里禁止使用子文件夹)
答案 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/