За последние 24 часа нас посетили 20393 программиста и 1008 роботов. Сейчас ищет 371 программист ...

htaccess убрать дублирующие слеши после домена

Тема в разделе "Настройка веб-сервера", создана пользователем Deonis, 19 фев 2019.

Метки:
  1. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Приветствую! Всё работало зашибись и если зайти на сайт по такому адресу: "https://site.com////wtf/", то шел редирект на "https://site.com/wtf/". Но тут СЕО-шники обнаружили, что при заходе на главную, дублирующие слеши не удалялись. Т.е. "https://site.com/////" не редиректится на нормальный URL.
    Из тех правил, что в моей коллекции и найденных в инете, лучше всего подошло такое:
    Код (Text):
    1. RewriteCond %{THE_REQUEST} \s/+(.*?)/{2,}([^\s]*) [NC]
    2. RewriteRule ^ %1/%2 [R=301,L,NE]
    Но тут появилась другая проблема - два редиректа: сначало на "http://site.com:443" и только потом на нормальный "https://site.com".

    Как подправить правило выше, чтобы редирект шел сразу на правильный URL?

    P.S. Может даже по другому правило составить, что было бы даже лучше. Что-то вроде "Если зашли именно на главную и есть несколько слешей, то редирект на главную без слешей."
     
    #1 Deonis, 19 фев 2019
    Последнее редактирование: 19 фев 2019
  2. Deonis

    Deonis Старожил

    С нами с:
    15 фев 2013
    Сообщения:
    1.521
    Симпатии:
    504
    Забыл упомянуть, что на Nginx опция merge_slashes была включена, но отключать её нельзя было, поэтому крутил htaccess.
    Решение нашел такое - на htaccess забиваем и дописываем в конфиге Nginx в секции server простой костыль:
    Код (Text):
    1. if ($request_uri ~ "^[^?]*?//") {
    2.     rewrite "^" $scheme://$host$uri permanent;
    3. }