301 редирект для категорий с подкатегориями

Freeman Liberty

Постоялец
Регистрация
19 Май 2009
Сообщения
489
Реакции
173
Помогите правильно прописать редирект
На сайте была категория "Бытовая техника" сайт.ru/household-appliances
содержащая подкатегории "Крупная бытовая техника" сайт.ru/household-appliances/major-appliances/
и "Встраиваемая техника" сайт.ru/household-appliances/vstraivaemaya-tehnika/

Данные категории в свою очередь включали в себя ряд подкатегорий

например, категория "Крупная бытовая техника" включала подкатегорию "Холодильники"
сайт.ru/household-appliances/major-appliances/fridge/

Название категории "Бытовая техника" household-appliances изменилось на bytovaia-tehnika
Название категории "Крупная бытовая техника" major-appliances изменилось на krupnaia
Название категории "Холодильники" fridge изменилось на holodilniki

т.е. раньше урл был
сайт.ru/household-appliances/major-appliances/fridge/
теперь стал
сайт.ru/bytovaia-tehnika/krupnaia/holodilniki/

Как правильно настроить редирект для категорий и подкатегорий, учитывая, что в них, также имеется постраничная навигация такого вида?
сайт.ru/bytovaia-tehnika/krupnaia/holodilniki/?page=3
 
Последнее редактирование:
Делал перенос одного интернет-магазина, пришлось делать ручные 301 редиректы со старых подподкатегорий на новые, со старых подкатегорий на новые, со старых категорий на новые... Файл htaccess вырос до 400 строк, но сайт функионировал так как нужно, и весь трафик сохранился... Другими словами при ТАКИХ кардинальных изменениях урлов - автоматизация крайне сложна, нужно делать руцями...

Относительно постраничной навигации, то при отлове урлов по REQUEST_URI все параметры остаются на месте и добавляются к новой странице, на которую сделан редирект...
 
Предположим для основной категории можно прописать редирект так
RewriteRule ^household-appliances/(.*) /bytovaia-tehnika/ [R=301,L]

А как для подкатегорий household-appliances/major-appliances и household-appliances/major-appliances/fridge ?
 
Предположим для основной категории можно прописать редирект так
RewriteRule ^household-appliances/(.*) /bytovaia-tehnika/ [R=301,L]
А как для подкатегорий household-appliances/major-appliances и household-appliances/major-appliances/fridge ?
Так не получится. У Вас от старых адресов ничего не осталось, все составляющие урла заменены. Поэтому нужно полностью со старого адреса делать переадресацию на новый.
Так:
Код:
RewriteEngine On
RewriteBase /

RewriteCond %{REQUEST_URI} household-appliances/major-appliances/fridge
RewriteRule household-appliances/major-appliances/fridge /bytovaia-tehnika/krupnaia/holodilniki/ [R=301,L]
Или так:
Код:
RewriteEngine On
RewriteBase /

RedirectPermanent /household-appliances/major-appliances/fridge/ /bytovaia-tehnika/krupnaia/holodilniki/
Единственное как можно автоматизировать - это сделать замену пар "старая часть урла" -> "новая часть урла" и каждую часть урла подменять отдельно, но это приведет к нескольким редиректам при загрузке одной страницы, что в свою очередь приведет к дополнительным нагрузкам на сервер при большой посещаемости сайта (да и гемороя и строчек кода здесь будет на порядок больше)
Пример вышесказанного:
Код:
RewriteEngine On
RewriteBase /

#пара измененных адресов всё-что-угодно/всё-что-угодно/fridge->всё-что-угодно/всё-что-угодно/holodilniki
RewriteCond %{REQUEST_URI} [a-zA-Z-]+/[a-zA-Z-]+/fridge
RewriteRule ([a-zA-Z-]+/[a-zA-Z-]+)/fridge /$1/holodilniki [R=301,L]
##и так далее перечисление всех нижних категорий старая->новая

#пара измененных адресов всё-что-угодно/major-appliances/всё-что-угодно->всё-что-угодно/bytovaia-tehnika/всё-что-угодно
RewriteCond %{REQUEST_URI} [a-zA-Z-]+/major-appliances/[a-zA-Z-]+
RewriteRule ([a-zA-Z-]+)/major-appliances/([a-zA-Z-]+) /$1/krupnaia/$2 [R=301,L]
##и так далее перечисление всех средних категорий старая->новая

#пара измененных адресов household-appliances/всё-что-угодно/всё-что-угодно->bytovaia-tehnika/всё-что-угодно/всё-что-угодно
RewriteCond %{REQUEST_URI} household-appliances/.*
RewriteRule household-appliances/(.*) /bytovaia-tehnika/$1 [R=301,L]
##и так далее перечисление всех верхних категорий старая->новая
Но если честно, то перечислить все изменившиеся категории и послать их на новые без "автоматизаций" будет гораздо лучше и для сервера и для программера ;)

PS: у Вас реально на сайте 25 категорий + подкатегорий. Это около 50 строчек кода и вопрос решен... Когда я переносил магазин у меня ушло 409 строчек кода, а у Вас лёгкий случай.
PPS: кстати у Вас под СЕО тексты не предусмотрено места, Вы бы при создании позаботились об этом, а то потом дорабатывать...
 
Последнее редактирование:
Так не получится. У Вас от старых адресов ничего не осталось, все составляющие урла заменены. Поэтому нужно полностью со старого адреса делать переадресацию на новый.

PPS: кстати у Вас под СЕО тексты не предусмотрено места, Вы бы при создании позаботились об этом, а то потом дорабатывать...

Я тоже думаю, что больше двух редиректов для страницы это уже перебор.
Сделал сейчас так
Код:
RewriteRule ^household-appliances/major-appliances/fridge/(.*)$ bytovaia-tehnika/krupnaia/holodilniki/$1 [R=301,L]
RewriteRule ^household-appliances/major-appliances/(.*)$ bytovaia-tehnika/krupnaia/$1 [R=301,L]
RewriteRule ^household-appliances/(.*)$ bytovaia-tehnika/$1 [R=301,L]

Результат устраивает или переведенная вами конструкция
RewriteCond %{REQUEST_URI} household-appliances/major-appliances/fridge
RewriteRule household-appliances/major-appliances/fridge /bytovaia-tehnika/krupnaia/holodilniki/ [R=301,L]
чем то лучше?

Под сео тексты место есть - в самом начале каждой категории. Просто не для всех категорий они написаны
Посмотрите, например, bytovaia-tehnika/krupnaia/holodilniki/
P.S. И вообще я название домена убирал не для того, чтобы вы вычисляли сайт через Яшу :)
 
Последнее редактирование:
Результат устраивает или переведенная вами конструкция чем то лучше?
Она лучше тем, что не будет ошибочных переадрессаций... Проверка есть проверка...
дабы недопустить ошибочных переадресаций при просто RewriteRule нужно сначала перечислить все правила нижних категорий, затем за ними все правила средних категорий, и только потом все правила верхних категорий.
Пример:
Код:
#сначала все нижние
RewriteRule ^household-appliances/major-appliances/fridge/(.*)$ bytovaia-tehnika/krupnaia/holodilniki/$1 [R=301,L]
RewriteRule ^household-appliances/major-appliances/oldsubsubcat1/(.*)$ bytovaia-tehnika/krupnaia/newsubsubcat1/$1 [R=301,L]
RewriteRule ^household-appliances/major-appliances/oldsubsubcat2/(.*)$ bytovaia-tehnika/krupnaia/newsubsubcat2/$1 [R=301,L]

#затем все средние
RewriteRule ^household-appliances/major-appliances/(.*)$ bytovaia-tehnika/krupnaia/$1 [R=301,L]
RewriteRule ^household-appliances/oldsubcat1/(.*)$ bytovaia-tehnika/newsubcat1/$1 [R=301,L]
RewriteRule ^household-appliances/oldsubcat2/(.*)$ bytovaia-tehnika/newsubcat2/$1 [R=301,L]

#затем все верхние
RewriteRule ^household-appliances/(.*)$ bytovaia-tehnika/$1 [R=301,L]
RewriteRule ^oldcat1/(.*)$ newcat1/$1 [R=301,L]
RewriteRule ^oldcat2/(.*)$ newcat2/$1 [R=301,L]
Под сео тексты место есть - в самом начале каждой категории. Просто не для всех категорий они написаны
Посмотрите, например, bytovaia-tehnika/krupnaia/holodilniki/
да, действительно есть. Правда если текст будет 3000 символов - часть придется каким-то образом прятать...
P.S. И вообще я название домена убирал не для того, чтобы вы вычисляли сайт через Яшу :)
Я и не вычислял. Посмотрите свой первый пост, 3 строчка - вы не удалили название интернет магазина после слов "сайт.ru/" ;)
 
Назад
Сверху