Удаление дублей посредством 301 редиректа

Александр
На сайте с 03.04.2009
Offline
62
1716

В общем затеял на одном сайте тотальную зачистку дублей страниц. Сайт на DLE.

В роботсе закрыл все что можно, но там далеко не все закроешь.

По этому перешел к настройке .htaccess.

Удалось без проблем закрыть:

Дубли c www

Т.е. все страницы с www.site.ru редиректят на site.ru

Кому нужно, вот код:


# Редирект c www.site.ru на без site.ru
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.site.ru
RewriteRule ^(.*)$ http://site.ru/$1 [R=permanent,L]

Дубли главной

Закрыл site.ru/index.php

Кому нужно, вот код:


# Редирект для главной (с /index.php,html на /)
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.html\ HTTP/
RewriteRule ^index\.html$ / [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ / [R=301,L]

Но вот столкнулся с проблемой дублей-категорий.

Цель - переадресовать УРЛы категорий без слеша в конце на УРЛы со слешем. Т.е. с site.ru/category на site.ru/category/

Нашел код:


# Редирект для добавления / в конц УРЛ)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://site.ru/$1/ [L,R=301]

С ним есть 2 проблемы:

1. Слеш добавляется не только к УРЛам категорий, но и к УРЛам новостей.

2. Не работабют статические страницы.

Есть обратный код, который убирает слеш со всех страниц:


# remove trailing slash if the url points to a non-existing folder
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]

Но мне он не совсем подходит, так как в индексе Гугла практически все страницы-категории со слешем, а в Яндексе и так и так.

Если воспользоваться последним кодом, то нужно будет очень долго ждать переиндексации.

P.S. Проблема возникла из за того, что давно по неопытности прописал в шаблоне УРЛ на категории без /, а ДЛЕ формирует эти УРЛ с ним (/).

Посоветуйте как быть...

Заранее благодарен!

Silver_UA добавил 04.06.2010 в 22:12

Разобрался...

Вот код:


RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !-f
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{REQUEST_URI} !.html$
RewriteRule (.+) $1/ [R=301,L]

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий