@esvlad
Веб-разработчик

Как в Битриксе настроить редирект ссылок без слеша в конце на с ним?

Пример:
Правильная ссылка https://skp02.ru/services/pechat-bannerov/ все нормально, а если https://skp02.ru/services/pechat-bannerov то показывается страница раздела.
Как сделать, если пользователь попадая на неё срабатывал редирект на нормальную ссылку?

В htaccess прописывал:
RewriteRule ^(.*)$ https://%1/$1/ [R=301,L]
и
RewriteCond %{REQUEST_URI} ^/services/$
RewriteRule .* /services/$1/ [R=301,L]

Не помогает.
  • Вопрос задан
  • 5054 просмотра
Решения вопроса 1
alexyarik
@alexyarik
Битрикс разработчик
#*со страниц без слеша на слеш*
		RewriteCond %{REQUEST_URI} !\?
		RewriteCond %{REQUEST_URI} !\&
		RewriteCond %{REQUEST_URI} !\=
		RewriteCond %{REQUEST_URI} !\.
		RewriteCond %{REQUEST_URI} !\/$
		RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
shambler81
@shambler81 Куратор тега htaccess
Владислав Старцев,
уже много раз вижу такую шляпу
кто вообще придумал этот редирект ?
RewriteCond %{REQUEST_URI} !\?
? - не может физически быть в %{REQUEST_URI} поскольку не является частью урла
собственно как и RewriteCond %{REQUEST_URI} !\&
& - выделяется через RewriteCond %{QUERY_STRING}
По факту все что тут работает
RewriteCond %{REQUEST_URI} !\=
Если не =, но простите а причем тут равно ? Скорее всего тот "мастер" что придумал сей редирект думал о GET параметрах, но они как я и говорил выше не попадают в REQUEST_URI
Если не точка, а простите причем тут точка ?
И того 2 условия в принципе не выполнимы
2 из них идиотские и не удовлетворяют тз

Все что остается это предпоследнее не слеш в конце
И сам реврайт рул.
То есть из всего правила работает 10% остальные 90% это мусор идиота

Теперь разберемся
Как бы это должно было быть на самом деле
Тут все сложнее поскольку есть пара условий в которых нельзя убирать слеш.
RewriteCond %{REQUEST_URI} \..+$
   # Если файл содержит точку.
RewriteCond %{REQUEST_FILENAME} !-d
   # И это не директория.
RewriteCond %{REQUEST_FILENAME} -f
   # Является файлом.
RewriteCond %{REQUEST_URI} ^(.+)/$
   # И в конце URL есть слеш.
RewriteRule ^(.+)/$ /$1 [R=301,L]
   # Исключить слеш.


Оданко не все так просто, сематнически правильно именно закрывать слешем
НА СЕО не влияет ни то ни то, это 100% инфа, влияет отсутствие редиректов с одного на другое что может дать два урла.
НО какой именно урл со слешем или нет, не влияет!

НО семантически URL должне быть закрыт
однако слеш после имени файла дает 404, если это просто файл.
Так что нам нужно разделить реальные файлы и урлы созданые ЧПУ

добавив вот такое правило.
############################################################################
#### Добавляем слеш(/), если его нет, и это не файл.                    ####
############################################################################
RewriteCond %{REQUEST_URI} !(.*)/$
   # Если слеша в конце нет.
RewriteCond %{REQUEST_FILENAME} !-f
   # Не является файлом.
RewriteCond %{REQUEST_URI} !\..+$
   # В URL нет точки (файл).
RewriteCond %{REQUEST_URI} ^(.+)$
 # В URL есть хоть один символы
RewriteRule ^(.*)$ $1/ [L,R=301]
   # Добавляем слеш в конце.


И того сразу два правила, притом именно в такой последовательности должны быть в .htccess
за врея работы я видил много горе СЕО специалистов рекоменующие вот такие шляпы, да и редиректы 90% которого не может сработать физически.
так же часто видил удаление аперкейсов в урлах ( чего разумеется тоже делать нельзя)
редиректы на хтмл мативируя тем что гугл думает что это статика и лучше их валидирует и тд и тп.
Все это лечится одним, удалением этого сотрудника и наемом более квалифицированного сеошника, а не плавающего товарищя в анабиозе.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы