Как избежать двойной индексации Google с помощью .htaccess? - PullRequest
0 голосов
/ 16 апреля 2011

У меня есть веб-сайт с хорошим RewriteRule в корне, который перенаправляет все запросы такого рода:

http://domain.com/foo/parameter

в

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

Пользователи могут видеть только чистый URL, и все довольны.

Теперь вот проблема: DNS DNS domain.com имеет запись A для domain.com, указывающую на IP частного сервера, и запись A для mail.domain.com, указывающую на точно такой же IP.

По неизвестной причине, в последние пару месяцев Google дважды проиндексировал все страницы моего сайта (http://domain.com/foo/par1, http://domain.com/foo/par2 и т. Д.) С другим набором с почтовым поддоменом (http://mail.domain.com/foo/par1, http://mail.domain.com/foo/par2). и т.д.).

Я подумал, что смогу избавиться от всех них, перенаправив любой запрос на mail.domain.com/$ что бы то ни было на domain.com, и в конечном итоге Google поймет, что все эти страницы с субдоменом 'mail' перенаправляют на домашнюю страницу и поэтому нет необходимости.

Я пробовал это в .htaccess:

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

Но это перенаправляет на видимый URL, который выглядит следующим образом: http://domain.com/index.php?args=parameter, а я просто хочу перенаправить на домашнюю страницу.

Какая форма правильная, и есть ли более элегантные способы добиться этого, возможно, добавить что-то в robots.txt? (Обратите внимание, что я не могу просто запретить подпапку здесь)

Ответы [ 2 ]

0 голосов
/ 17 апреля 2011

Если вы просто хотите перенаправить на домашнюю страницу, отбросив исходные REQUEST_URI и QUERY_STRING, тогда используйте эти правила:

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

Если в конце поставить ?, исходная строка запроса будет удалена, таким образомURL этого типа: http://mail.domain.com/index.php?args=parameter станет http://domain.com/

0 голосов
/ 16 апреля 2011

Ваше правило верно, но вам нужно поставить его перед всеми остальными правилами (сразу после RewriteEngine On), иначе оно подберет последнее состояние внутреннего переписанного URL.

Обновление: Хм, вы сказали, что ваше старое правило перенаправляет правильно, но использует внутренний, уродливый, URL. На самом деле это не должно иметь место, если вы не добавите $1, чтобы выбрать подходящую строку.

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