убрать множественный редирект в htaccess

*
На сайте с 08.09.2009
Offline
183
1516

Привет

Поменялась ссылочная структура, пришлось заменить в URL знаки подчеркивания на тире,

Прописал вот такое правило:

RewriteRule ^(.+)(\s|_|---)(.+)$ /$1-$3 [R=301,L]

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

Как все найденные знаки обработать за раз и вернуть всего один ответ 301?

SI
На сайте с 03.12.2007
Offline
130
#1

Использовать N|next вместо L|last

http://httpd.apache.org/docs/current/rewrite/flags.html#flag_n

-= Онлайн сервисы =-
J
На сайте с 20.02.2014
Offline
120
jkm
#2

За один раз правилами mod_rewrite можно заменить только какое-то фиксированное количество знаков.

RewriteCond $1-$2 ^(?|([^_]*)_(.*)|(.*)-(.*))

RewriteCond %1-%2 ^(?|([^_]*)_(.*)|(.*)-(.*))
RewriteCond %1-%2 ^(?|([^_]*)_(.*)|(.*)-(.*))
RewriteCond %1-%2 ^(?|([^_]*)_(.*)|(.*)-(.*))
RewriteRule ^([^_]*)_(.*) /%1-%2 [R=301,L]

Удобнее делать замену средствами PHP.

RewriteRule _ redirect.php [L]

redirect.php

<?php

header('Location:' . str_replace('_', '-', $_SERVER['REQUEST_URI']), true, 301);
*
На сайте с 08.09.2009
Offline
183
#3

Sigmo#ID хоть в описании эта опция и есть, в реале оно работать не захотело вообще, начала выкидывать ответ "страница недоступна"

jkm

респект, годны оба, посредством php понравилось

J
На сайте с 20.02.2014
Offline
120
jkm
#4
*NR*:
Sigmo#ID хоть в описании эта опция и есть, в реале оно работать не захотело вообще, начала выкидывать ответ "страница недоступна"

Там кроме замены флага L|last на N|next нужно ещё разделить работу на два правила.

Одно правило только заменяет и в случае успеха обьявляет переменную окружения.

Второе правило проверяет эту переменную и делает редирект.

RewriteRule ^([^_]*)_(.*) $1-$2 [N,E=FINISH:1]


RewriteCond %{ENV:FINISH} =1
RewriteRule ^(.*) /$1 [R=301,L]
*
На сайте с 08.09.2009
Offline
183
#5

jkm

в браузере отрабатывает, редирект происходит, но инструменты анализа ответа сервера вообще не видят страницы, даже Яндекс говорит "Не удалось скачать содержимое страницы"

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