@Lici

Проблема с 301 редиректом?

Есть старый сайт, который был перенесен на SimplaCMS. Изменилась структура URL и нужно сделать редирект со старых страниц на новые.


Файл хтаццес имеет такой вид: (редиректы в конце самом)

AddDefaultCharset UTF-8

ErrorDocument 404 /404

ErrorDocument 401 /password.php

RewriteEngine on


# Админка теперь по адресу /simpla

RewriteRule ^admin/?$ simpla [L]


# Каталог товаров

RewriteRule ^catalog/([^/]+)/?$ index.php?module=ProductsView&category=$1 [L,QSA]

RewriteRule ^catalog/([^/]+)/([^/]+)/?$ index.php?module=ProductsView&category=$1&brand=$2 [L,QSA]


RewriteRule ^products/([^/]+)/?$ index.php?module=ProductView&product_url=$1 [L,QSA]

RewriteRule ^products/?$ index.php?module=ProductsView [L,QSA]


RewriteRule ^brands/([^/]+)/?$ index.php?module=ProductsView&brand=$1 [L,QSA]

RewriteRule ^brands/([^/]+)/page_([^/]+)/?$ index.php?module=ProductsView&brand=$1&page=$2 [L,QSA]


# Поиск товаров

RewriteRule ^search/([^/]+)/?$ index.php?module=ProductsView&keyword=$1 [L,QSA]

RewriteRule ^search/?$ index.php?module=ProductsView [L,QSA]


# Блог

RewriteRule ^blog/([^/]+)/?$ index.php?module=BlogView&url=$1 [L,QSA]

RewriteRule ^blog/?$ index.php?module=BlogView [L,QSA]


# Корзина и заказы

RewriteRule ^cart/?$ index.php?module=CartView [L,QSA]

RewriteRule ^cart/([^/]+)/?$ index.php?module=CartView&add_variant=$1 [L,QSA]

RewriteRule ^cart/remove/([^/]+)/?$ index.php?module=CartView&delete_variant=$1 [L,QSA]

RewriteRule ^order/([^/]+)/?$ index.php?module=OrderView&url=$1 [L,QSA]

RewriteRule ^order/?$ index.php?module=OrderView [L,QSA]


# Для пользователей

RewriteRule ^user/login/?$ index.php?module=LoginView [L,QSA]

RewriteRule ^user/register/?$ index.php?module=RegisterView [L,QSA]

RewriteRule ^user/logout/?$ index.php?module=LoginView&action=logout [L,QSA]

RewriteRule ^user/password_remind/?$ index.php?module=LoginView&action=password_remind [L,QSA]

RewriteRule ^user/password_remind/([0-9a-z]+)/?$ index.php?module=LoginView&action=password_remind&code=$1 [L,QSA]

RewriteRule ^user/?$ index.php?module=UserView [L,QSA]


# Google sitemap

RewriteRule ^sitemap.xml?$ sitemap.php [L,QSA]


# XML

RewriteRule ^yandex.xml?$ yandex.php [L,QSA]


# feedback

RewriteRule ^contact/?$ index.php?module=FeedbackView [L,QSA]


#downloads

RewriteRule ^order/([^/]+)/([^/]+)/?$ index.php?module=OrderView&url=$1&file=$2 [L,QSA]


# Статические страницы

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^([^/]*)/?$ index.php?module=PageView&page_url=$1 [L,QSA]

RewriteRule ^/?$ index.php?module=MainView&page_url= [L,QSA]


# Ресайз картинок на лету

RewriteCond %{REQUEST_FILENAME} !-d

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^files/products/(.+) resize/resize.php?file=$1&token=%{QUERY_STRING}

#RewriteCond %{THE_REQUEST} ^GET\ (.*)files/products/(.*)\?([A-z0-9]*)

#RewriteRule ^files/products/(.+) resize/resize.php?file=%2&token=%3 [L,NE]


#перенос старых страниц
Redirect 301 /product_49.html www.site.ru/products/ololo1

Redirect 301 /product_94.html www.site.ru/products/nashlemnaja_lolo

Redirect 301 /product_174.html www.site.ru/products/lololo2

Redirect 301 /product_64.html www.site.ru/products/tovar

Redirect 301 /product_66.html www.site.ru/products/tovar2

Redirect 301 /product_173.html www.site.ru/products/tovar3



Однако при переходе по адресу /product_49.html мы попадаем на адресс products/ololo1?module=PageView&page_url=product_49.html


то же самое при использовании синтаксиса:


RewriteRule ^old_page.html$ /new_page [R=301,L]


В чем может быть дело? Как это исправить? Заранее спасибо.
  • Вопрос задан
  • 7684 просмотра
Решения вопроса 1
truekenny
@truekenny
У вас срабатывает правило # Статические страницы.
Поместите код #перенос старых страниц до него.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
UZER2006
@UZER2006
Думается мне, что срабатывает ещё это правило
# Статические страницы
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]*)/?$ index.php?module=PageView&page_url=$1 [L,QSA]
RewriteRule ^/?$ index.php?module=MainView&page_url= [L,QSA]

Что происходит, если убрать redirect'ы и перейти по тому же адресу /product_49.html?
Попробуйте перенести раздел #перенос старых страниц выше и после редиректа тоже рубать по [L]
Ответ написан
LaFut
@LaFut
Дело в приоритетах. Как я понял ModRewrite, потом ProxyPass и только потом Redirect. Поэтому у меня перемещение redirect в любое место файла htaccess не помогает
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы