oOLokiOo
@oOLokiOo
PHP Developer

htaccess — проблемы с 301 редиректом с GET параметрами, что я делаю не так?

На сайте поменялись урлы и нужно сделать 301 редеректы на старые.
Было my-site.ru/catalog/?branch=3855
Стало my-site.ru/catalog/3855/

Пробовал различные вариации, аля:

RewriteRule ^catalog/?branch=([0-9]+)$ catalog/$1/ [R=301,L]

RewriteCond %{QUERY_STRING} ^[?]?branch=(.*)[&|$] [NC]
RewriteRule /catalog/ my-site.ru/catalog/%1/ [R=301,L]

RewriteCond %{QUERY_STRING} ^branch=([^&]+)
RewriteRule ^.*$ my-site.ru/catalog/%1/ [R=301]


ничего не подошло…

Any Ideas?
  • Вопрос задан
  • 14233 просмотра
Пригласить эксперта
Ответы на вопрос 5
oOLokiOo
@oOLokiOo Автор вопроса
PHP Developer
Короче, заколебало меня мучатся в итоге и я сделал это на уровне PHP :)

if (strpos($_SERVER['REQUEST_URI'], '/catalog/?branch=') !== false)
{
header(«HTTP/1.1 301 Moved Permanently»);
header(«Location: www.aleshka.by/catalog/».str_replace("/catalog/?branch=","",$_SERVER['REQUEST_URI'])."/");
exit();
}

но всё же, на будущее, хотелось бы знать, как это реализовать на уровне mod rewrite
Ответ написан
Комментировать
@dds
Попробуйте вот такой вариант:

    RewriteCond %{QUERY_STRING} ^branch=([0-9]+)
    RewriteRule ^(.*)$ http://cv.local/$1%1/? [R=301,L]
Ответ написан
Комментировать
ilyautkin
@ilyautkin
Попробуйте так:

RewriteCond %{QUERY_STRING} branch=(.*)$ [NC]
RewriteRule ^(.*) /? [R=301,L] 
Ответ написан
RewriteRule ^/catalog/\?branch=([0-9]+)$ /catalog/$1/ [R=301,L]
Ответ написан
tegrato
@tegrato
Вот здесь описаны варианты 301 редиректа с параметрами: https://skalolaskovy.ru/joomla/500-htaccess-301-re...
Задача, правда, немного иная, но принцип можно использовать и вручную прописать все редиректы, без универсальной маски.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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