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), делать редиректы нет необходимости.

  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/
    Как для них прописать исключения? Спасибо

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *