Есть ли возможность задать последовательность 301 редиректов?

V7
На сайте с 09.02.2008
Offline
113
627

Есть сайт. Сейчас занимаемся переносом на другую платформу и приводим УРЛ к единому стандарту, т.к на прежнем был хаос, т.к можно было задавать произвольные урл. В новом движке они четко регламентированы.

В связи с этим часть УРЛ необходимо перенаправить на страницы с окончанием .html а у части сделать так, чтобы слеш в конце / урл убирался

Сделал последовательность такую

Redirect 301 /about/ /about.html

Redirect 301 /services/khirurg/lechenie/ /services/lechenie

# Remove trailing slash from URLs

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.+)/$ /$1 [R=301,L]

по сути сначала должен отработать редирект с /about/ на /about.html а уже потом убирать у всех урл слеш /services/ на /services и т.д. по аналогии

но почему то сервер сразу отрабатывает редирект, убирая слеш даже в случае с Redirect 301 /about/ /about.html, убирая слеш получается /about (и в итоге 404 ошибка) а не /about.html, аналогично и в случае Redirect 301 /services/khirurg/lechenie/ /services/lechenie отрабатывает убирая просто слеш /services/khirurg/lechenie а не /services/lechenie

как можно корректно задать последовательность отрабатывания редиректов? вообще есть ли такая возможность?

M
На сайте с 04.12.2013
Offline
223
#1

Браузеры обычно без проблем выполняют мин. три редиректа. Но в вашем случае, локально в одном месте, лучше этого не делать, «сэкономив» редиректы для использования внутри платформы/движка, тем более что есть рерайты.

---------- Добавлено 05.12.2017 в 16:14 ----------

Зачем трэйлинг слеш редиректить на левый .html, от кот. вы отказываетесь? Сделайте два отдельных правила редиректа для трэйлинг слеша и для .html (последнее, если есть .html) на нужный формат адреса.

---------- Добавлено 05.12.2017 в 16:17 ----------

Vlad7090:

# Remove trailing slash from URLs
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=301,L]
Рискуете получить зацикливание на каталогах, т.к. оч. часто бывает активен модуль, делающий обратное. Нужно просто при его активности запретить ему самовольничать.

---------- Добавлено 05.12.2017 в 16:36 ----------

Vlad7090:
В связи с этим часть УРЛ необходимо перенаправить на страницы с окончанием .html а у части сделать так, чтобы слеш в конце / урл убирался
Эээ... даже так. Извините, плохо читал. Решили все-таки что-то оставить от прежнего хаоса на память :) Оптимально – не мучить .htaccess, оставив там только редирект с трэйлинг слешей, а /about -> /about.html сделать внутри движка – получите два подряд идущих редиректа, о кот. вы так мечтали. Либо не использовать в .htaccess два разных модуля, а прописать при помощи mod_rewrite те исключения, которые вы делали при помощи директивы Redirect. Либо смешанный вариант: по возможности все-таки использовать движок, а казусы вроде /about/ -> /about.html оставить в .htaccess (в одном правиле), если их немного.
Домены и скрипт для коротких ссылок: https://u75.ru/domains-for-shortcuts
V7
На сайте с 09.02.2008
Offline
113
#2

да видимо придется через модреврайт или через исп менеджер делать редиректы, т.к они тогда отрабатывают первыми. спасибо за совет, что-то забыл про этот способ более приоритетной перееадресации)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий