Тема: Общая тема по редиректам и борьбе с дублями в DLE

В этой теме предлагаю задавать свои вопросы и описывать проблемы, связанные с дублированием страниц по неверным или ошибочным адресам.

А то уже надоели создавать новые темы каждый день об одном и том же! Теперь все вопросы и все решения будут в одном месте.

Два очень важных поста на блоге:
Избавляемся от дублирования контента, связанного с URL в DLE
Redirect 301 – теория и практика редиректа, настройка и правила использования

Разрешается задавать вопросы в этом топике только после ознакомления с вышеупомянутыми постами и частыми проблемами, описанными сразу ниже.

Решение частых проблем


Дублирование страниц из-за параметров:
Пример проблемных url: site.ru/?smth=blabla или site.ru/index.php?smth=blabla
Важно: вместо smth и blabla могут быть любые названия, т.е. любые буквы или цифры, smth и blabla приведены для примера
после ?smth=blabla может идти знак & и после него еще какие-то параметры, но это не на что не влияет
Решение: Открываем .htaccess в корне (где index.php) и сразу после RewriteEngine On добавляем:

RewriteCond %{QUERY_STRING} ^smth= [NC]
RewriteRule (.*) $1? [R=301,L]

Дополнение: Если же у вас дубли вида site.ru/?smth или site.ru/page-name.html?smth то код будет таким:

RewriteCond %{QUERY_STRING} ^smth [NC]
RewriteRule (.*) $1? [R=301,L]

Дублирование страниц из-за множественных слешей:
Пример проблемных url: site.ru//index.php или site.ru//// или site.ru/page////5/ и т.д.
Важно: как вы поняли, количество слешей может быть любое и они могут встретиться в любой части url
Решение: Открываем index.php в корне и сразу после:

define ( 'ENGINE_DIR', ROOT_DIR . '/engine' );

добавляем:

    $path = $_SERVER['REQUEST_URI'];    
    if (preg_match('#//+#', $path)) {
        $path = preg_replace('#//+#', '/', $path);
        header('Location: http://' . $_SERVER['HTTP_HOST'] . $path, true, 301);
    }

2

Re: Общая тема по редиректам и борьбе с дублями в DLE

Отписал в комменты, надеюсь не обидишься если продублирую

В шаблоне сайта я использую дополнительные поля в которых у меня вставляется ID видео с YouTube. В вебмастере яши заметил такую тенденцию — HTTP-статус: Ресурс не найден (404) и ссылки с урл заканчивающимся на тот код, что используется для вставки видео, т.е. http://mysite.tu/-hgdgek где — hgdgek это тот код, который используется для вставки видео через дополнительное поле. Возможно ли настроить редирект с этих страниц, дабы убрать ошибки в вебмастере или это не так страшно, если они все равно ведут на страницу 404 ошибки.

3

Re: Общая тема по редиректам и борьбе с дублями в DLE

Тогда удалите тему что я ниже создавал... НУ и сама проблема: Некоторое время все было хорошо но сейчас полезли ошибки с адресом страниц отличающихся по количеству букв, тобишь вот так например: http://site.ru/eur.. и  http://site.ru/europ... и http://site.ru/european... и так далее и уже не только с этой одной категорией веселье такое, но уже и с некоторыми новостями на сайте, понятно что не какими редиректами с этих кривых ссылок на главную не спасешься ибо нет такого общего редиректа, остается понять откуда это берется вообще, чтобы избавится в зародыше, потому что этих ошибок будет все больше и больше, может кто уже встречался с таким ? или у кого-то похожая проблема... Как избавится ?

4 (28.05.2013 01:59 отредактировано *Gaara*)

Re: Общая тема по редиректам и борьбе с дублями в DLE

Вот подбного вида ошибки как убрать? Год назад стоял скрипт обратных ссылок. И год назад его благополучно удалили. Но ссылки на него остались на стронних ресурсах. Теперь нужно сделать 301 редирект на главную страницу или как лучше поступить в данной ситуации?

http://clip2net.com/clip/m0/1369689246-clip-7kb.png

Первую часть правила я понял как написать

RewriteCond %{QUERY_STRING} ^(.*)rz=

А вот вторую часть никак не пойму как сделать. Фигня какая то выходит.

Re: Общая тема по редиректам и борьбе с дублями в DLE

*Gaara* пишет:

Вот подбного вида ошибки как убрать?

Вот как-то так надо:

RewriteCond %{QUERY_STRING} ^rz= [NC]
RewriteRule (.*) $1? [R=301,L]
RewriteRule links891250.php / [R=301,L]

6

Re: Общая тема по редиректам и борьбе с дублями в DLE

admin пишет:

RewriteCond %{QUERY_STRING} ^rz= [NC]
RewriteRule (.*) $1? [R=301,L]
RewriteRule links891250.php / [R=301,L]

Да. Спасибо. Так заработало.
Можешь как-то объяснить принцип работы и синтаксис RewriteRule. Или ткни в ссылку где про это понятно для новичков можно почитать.

Re: Общая тема по редиректам и борьбе с дублями в DLE

*Gaara* пишет:

Можешь как-то объяснить принцип работы и синтаксис RewriteRule. Или ткни в ссылку где про это понятно для новичков можно почитать.

Объяснить невозможно, тут надо на практике пробовать. Информацию можно нагуглить - я более точно не подскажу.

8

Re: Общая тема по редиректам и борьбе с дублями в DLE

admin пишет:

Объяснить невозможно, тут надо на практике пробовать. Информацию можно нагуглить - я более точно не подскажу.

1,5 часа вчера мучался. Так и не разобравшись отправился спать smile

Re: Общая тема по редиректам и борьбе с дублями в DLE

*Gaara* пишет:

1,5 часа вчера мучался.

Фиии... Я когда-то в 2006 (или даже раньше) когда познавал основы верстки порой пару дней сидел, постигая, почему же у меня один пиксель не сходится...
Ничего, со временем умение придет, главное не забивать!

10

Re: Общая тема по редиректам и борьбе с дублями в DLE

Появился такой дубль site.ru/site.ru smile

Правильный редирект ? Срабатывать то срабатывает, но мало ли что...

RewriteRule (.*)site.ru$ $1 [R=301,L]

Самое интересное что увидеть 0 ошибок по всем пунктам в оптимизации html это что-то не достижимое, вот их уже остается всего 6 или 4 или 2 и кажется еще один ап и все, будут бублики, но тут обязательно появляется какая-то новая фигня...

11

Re: Общая тема по редиректам и борьбе с дублями в DLE

Abrikos пишет:

Правильный редирект ?

На всякий случай сделай так, чтобы наверняка:

RewriteBase /
RewriteRule ^(.*)site\.ru$ $1 [R=301,L]

12 (13.06.2013 12:04 отредактировано Karf)

Re: Общая тема по редиректам и борьбе с дублями в DLE

Уважаемый АлаичЪ, помогите пожалуйста разобраться с редиректом.
Я удалил категорию, которая находилась по адресу site.ru/novosti/ и хочу сделать редирект с этого адреса на главную.

Пытался сделать способами в .htaccess, описанными на вашем сайте,т.е. вот этими:

Redirect 301 /novosti/ http://site.ru/
Redirect permanent /novosti/ http://site.ru/
RedirectPermanent /novosti/ http://site.ru/

При использовании любого из них меня перекидывает не на главную, а на вот такую страницу:

http://site.ru/?do=cat&category=novosti/

Также пытался в index.php делать вот так:

if ( getenv(’REQUEST_URI’) == ‘/novosti/‘ )
{
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: http://site.ru/” );
exit;
}

После этого способа сайт вообще не работает, может не туда ставлю, а точнее, вообще не знаю куда ставить.

Подскажите пожалуйста, что я не так делаю и как сделать редирект (DLE 9.7).

13

Re: Общая тема по редиректам и борьбе с дублями в DLE

Karf, Попробуй так:

RewriteBase /
RewriteRule ^(.*)novosti/$ $1 [R=301,L]

Вставлять сразу после RewriteEngine On

Re: Общая тема по редиректам и борьбе с дублями в DLE

admin, Благодарю, как всегда после твоих советов всё OK!

15

Re: Общая тема по редиректам и борьбе с дублями в DLE

Подскажите пожалуйста как сделать редирект с site.ru/& на главную?

16

Re: Общая тема по редиректам и борьбе с дублями в DLE

Min-Z-Drav, Попробуй так:

RewriteBase /
RewriteRule ^(.*)\&$ $1 [R=301,L]

17

Re: Общая тема по редиректам и борьбе с дублями в DLE

admin, не работает(

18

Re: Общая тема по редиректам и борьбе с дублями в DLE

Min-Z-Drav, В таком случае могу предложить делать php-редирект, но где и как именно не подскажу на данный момент.

19

Re: Общая тема по редиректам и борьбе с дублями в DLE

Здравствуйте!

В ЧПУ всё установлено.

Но, периодически, в индекс "прорываются" такие страницы:

http://www.site.ru/index.php?do=static&page=some_page

Подскажите, пожалуйста, как это победить.

Пробовал так, но, видимо, неправильно:

#RewriteBase /
#RewriteCond %{QUERY_STRING} ^do=static&page=(.*) [NC]
#RewriteRule /$1.html? [R=301,L]

20

Re: Общая тема по редиректам и борьбе с дублями в DLE

kind_whale пишет:

Пробовал так, но, видимо, неправильно:

Ну, как минимум эти правила закоментированы, это видно по решетке в начале строки, что означает комментарий. А комментарий не исполняется программой никогда.
Правильно вот как-то так должно быть:

RewriteBase /
RewriteCond %{QUERY_STRING} ^do=static&page=(.*)$ [NC]
RewriteRule ^(.*)$ /%1.html? [R=301,L]