开发者

How to avoid double google indexing using .htaccess?

开发者 https://www.devze.com 2023-02-26 05:39 出处:网络
I have a website, with a nice RewriteRule in its root, that redirects all the queries of this kind: http://domain.com/foo/parameter

I have a website, with a nice RewriteRule in its root, that redirects all the queries of this kind:

http://domain.com/foo/parameter

into

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

Users can only see the clean URL and everyone is happy.

Now here is the problem: domain.com DNS have an A record for domain.com, pointing to a private server IP, and an A record for mail.domain.com, pointing to the exact same IP.

For some unknown reason, in the last couple of months, Google double indexed all the pages of my site (http://domain.com/foo/par1, http://domain.com/foo/par2 etc.) with another set with the mail subdomain (http://mail.domain.com/foo/pa开发者_Python百科r1, http://mail.domain.com/foo/par2 etc).

I thought I could get rid of all of them redirecting any request to mail.domain.com/$whatever to domain.com and eventually Google would understand that all those pages with the 'mail' subdomain redirects to the homepage and are therefore not necessary.

I tried this in .htaccess:

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

But this redirects to a visible URL that looks like this: http://domain.com/index.php?args=parameter, while I just want a redirect to the homepage.

What's the correct form, and are there more elegant ways to achieve this, maybe adding something into robots.txt? (Please note that I can't just disallow a subfolder here)


If you just want to redirect to home page by discarding the original REQUEST_URI and QUERY_STRING then use these rules:

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

By putting ? in the end it will strip out original query string, thus a URL of this type: http://mail.domain.com/index.php?args=parameter will become http://domain.com/


Your rule is correct, but you need to put it before all the other rules (right after RewriteEngine On) or it will pick up the latest state of the internal rewritten URL.

Update: Hmm, you said that your old rule redirects correctly but is using the internal, ugly, URL. That actually shouldn't be the case unless you add $1 to pick out the matched string.

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

精彩评论

暂无评论...
验证码 换一张
取 消