Когда на сайте 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 на исходную страницу без слеша или нет.
Кидайте ссылку, посмотрим. Либо проверьте в Яндекс.Вебмастере ответ сервера (либо в любом другом онлайн сервисе) по каждой из ссылок.
Исправил через хостинг, спасибо!
А если у меня на сайте страница без слеша показывает 404, то надо сделать так же или необязательно? Ведь по идее контент не дублируется, но с другой стороны, стерев «лишний» символ мы получаем 404.
Олеся, значит у Вас все хорошо. Адреса страниц должны открываться либо со слешем, либо без него. В вашем случае нет дублирования страниц, так как без слеша страница не существует (ошибка 404), делать редиректы нет необходимости.
Подскажите, у меня есть ряд страниц порядка 20-30, которые нужно перенести с без слеша на слеш.
Как это сделать для отдельных страниц (массово нельзя ибо такой функционал, что часть страниц долна быть со слешем а другая без — к сожалению)
RewriteRule old-page.html /new-page.html [R=301,L]
где:
old-page.html — урл старой страницы
/new-page.html — урл новой страницы
Один урл — одна строка.
У меня так сработало:
# Редирект домена с 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]
Спасибо Владимиру. На других блогах готовые решения не помогли.
как сделать редирект одной конкертной страницы, а не всех?
Как сделать редирект для конкретной страницы описано тут https://ya-knyazev.ru/301-redirekt/
Если кратко, то вот так: RewriteRule old-page.html /new-page.html [R=301,L]
Подскажите пожалуйста. У меня стоит редирект со слешем в конце. Но почему-то редирект идет на http а не на https версию страницы. Т.е. получается двойной редирект.
попробую
Спасибо за рецепт. Искал, как сделать / в конце, т.к. все урлы построены по такому принципу на сайте, но из-за отсутствия редиректа дублируются и без слэша. Но возникла другая проблема — после использования данного правила — перестали отрабатываться файлы robots.txt и sitemap.xml и все, что не /url/
Как для них прописать исключения? Спасибо