товарищи! простенький вопрос:
после изменения структуры сайта ранее проиндексированные страницы имеют статус 404.
как в .htaccess сделать редирект страниц по шаблону:
с site.ru/catalog/xxx
на site.ru/catalog/avto/xxx
(где ххх = разные страницы сайта)
*примечание
в процессе поисков обнаружил лишь обратный пример:
с yourdomain.com/category/blue
на yourdomain.com/blue
используется такое правило:
RewriteRule ^category/(.+)$ http://www.site.com/$1 [R=301,L]
Комментарии
RewriteRule ^catalog/(.+)$ http://www.site.com/catalog/avto$1 [R=301,L]
спасибо за комментарий.
я тоже хотел именно так сделать, но подумал при таком правиле возникнет циклический редирект.
после вашего совета всё-таки прописал это правило и действительно результат такой:
http://www.site.com/catalog/avto/avto/avto/avto/avto/avto.../xxx
какие еще предложения есть?
добавлю немного пояснительной информации.
страницы вида:
site.ru/catalog/5902/
site.ru/catalog/5902/?elements=1
нужно перенаправить на:
site.ru/catalog/avto/5902/
site.ru/catalog/avto/5902/?elements=1
после некоторых экспериментов выяснилось, что если использовать такое правило:
RewriteRule ^catalog/[0-9]+/(.*)$ http://site.ru/catalog/avto$1 [R=301,L]
то указанные выше страницы перенаправляются на:
site.ru/catalog/avto/
site.ru/catalog/avto/?elements=1
вопрос - как добавить циферки 5902 к новому адресу?
RewriteRule ^catalog/([0-9]+)$ http://www.site.com/catalog/avto$1 [R=301,L]
или, если там не только цифры, и нужно исключить только слово avto, добавить условие.
RewriteCond %{REQUEST_URI} !^/catalog/avto/
прописал правило, предложенное вами, но результат не изменился.
страница site.ru/catalog/5902/
перенаправляется site.ru/catalog/avto/
а нужно на site.ru/catalog/avto/5902/
в чем ошибка?
слеша после авто не хватает:
RewriteRule ^catalog/([0-9]+)$ /catalog/auto/$1 [R=301,L]
проверил, это у меня сработало. ставить надо до правила
RewriteRule ^ index.php [L]
а, если со слешами и переменными, то ещё такое правило добавить:
RewriteRule ^catalog/([0-9]+)/(.*)$ /catalog/auto/$1/$2 [R=301,L]
хммм.. всё-равно не получается, хотя поставил это правило выше всех.
вроде всё правильно же.
<ифмолуль mod_rewrite.c>
Options +FollowSymLinks
RewriteEngine On
#редирект старых страниц
RewriteRule ^catalog/([0-9]+)$ http://site.ru/catalog/avto/$1 [R=301,L]
#склейка
RewriteCond %{HTTP_HOST} ^www.site.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
#слеш в конце строки
RewriteCond %{REQUEST_URI} ^(.*/[^/\.]+)$
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R=301,L]
#убираем индекс из адреса
RewriteCond %{REQUEST_URI} ^/index\.(.+)$
RewriteRule ^.*$ http://%{HTTP_HOST}/ [R=301,L]
тут закрывающий тег ифмолуль
о! заработало!
использовал вот это ваше правило
RewriteRule ^catalog/([0-9]+)/(.*)$ /catalog/avto/$1/$2 [R=301,L]
спасибо большое, товарищу greenmother! )
надеюсь, данная информация и кому-нибудь еще пригодится
на всякий случай напишу для поисковиков, может кто наткнется через гугл на эти посты
перенаправление, редирект
с site.ru/xxx на site.ru/xxx/yyy
с сайт/1 на сайт/1/2