301 редирект для страниц без слеша и со слешем на конце

Когда на сайте URL адреса вида:

/301-redirekt-dlya-stranic-bez-slesha-i-so-sleshem/

/301-redirekt-dlya-stranic-bez-slesha-i-so-sleshem

Страница может открываться без слеша и со слешем на конце, что приводит к дублированию (одна и та же страница отрывается по двум адресам). Для решения этой проблемы — необходимо определить один вариант (посмотреть как проиндексирован сайт поисковыми системами) и сделать 301 редирект через файл .htaccess

Убираем слеш в конце

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

Со слешем на конце

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]
Такая проблема встречается довольно часто и исправить эту ошибку критически необходимо.

Комментарии по теме “301 редирект для страниц без слеша и со слешем на конце

  1. Добрый день! Сделал все, как вы указали. Однако видимо с кешем проблема, то перенаправляет, то нет страницы. Никак не могу понять, работает 301 на исходную страницу без слеша или нет.

    1. Кидайте ссылку, посмотрим. Либо проверьте в Яндекс.Вебмастере ответ сервера (либо в любом другом онлайн сервисе) по каждой из ссылок.

  2. А если у меня на сайте страница без слеша показывает 404, то надо сделать так же или необязательно? Ведь по идее контент не дублируется, но с другой стороны, стерев «лишний» символ мы получаем 404.

    1. Олеся, значит у Вас все хорошо. Адреса страниц должны открываться либо со слешем, либо без него. В вашем случае нет дублирования страниц, так как без слеша страница не существует (ошибка 404), делать редиректы нет необходимости.

      1. Ага уж! Что за вредные советы? Большинство внешних ссылок люди проставляют без слеша (а некоторые площадки сами его убирают) и все эти ссылки, в случае Олеси, окажутся 404 (читай – сайт теряет вес, причем оба). Редирект обязателен.

  3. Подскажите, у меня есть ряд страниц порядка 20-30, которые нужно перенести с без слеша на слеш.
    Как это сделать для отдельных страниц (массово нельзя ибо такой функционал, что часть страниц долна быть со слешем а другая без — к сожалению)

    1. RewriteRule old-page.html /new-page.html [R=301,L]
      где:
      old-page.html — урл старой страницы
      /new-page.html — урл новой страницы
      Один урл — одна строка.

  4. У меня так сработало:

    # Редирект домена с WWW на домен без WWW
    RewriteCond %{HTTP_HOST} ^www\.(.*)$
    RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

    # Убираем лишние слеши на конце URL
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} ^(.+)/$
    RewriteRule ^(.+)/$ /$1 [R=301,L]

    Спасибо Владимиру. На других блогах готовые решения не помогли.

  5. Подскажите пожалуйста. У меня стоит редирект со слешем в конце. Но почему-то редирект идет на http а не на https версию страницы. Т.е. получается двойной редирект.

  6. Спасибо за рецепт. Искал, как сделать / в конце, т.к. все урлы построены по такому принципу на сайте, но из-за отсутствия редиректа дублируются и без слэша. Но возникла другая проблема — после использования данного правила — перестали отрабатываться файлы robots.txt и sitemap.xml и все, что не /url/
    Как для них прописать исключения? Спасибо

  7. Приветствую!
    Безусловно этим способом можно перебрасывать, но есть ли рабочее решение под opencart? Там если так сделать, то при входе в админку будет бесконечный редирект со слеш на без и обратно =(((
    Если не получится найти решение, буду делать через canonical

Добавить комментарий

Ваш адрес email не будет опубликован.