Не получается сделать нормальный 301-й редирект в htaccess

BI
На сайте с 01.02.2011
Offline
37
295

Добрый день!

Помогите с настройкой правила для 301-го редиректа в .htaccess.

Есть сайт на самопальной CMS, которую меняю на вордпресс. Соответственно все старые статьи введены в вордпресс и получили новые ссылки. Нужно со старых ссылок переключать на новые.

Старые ссылки имеют следующий вид:

www.site.ru/article.php?MenuID=2&SubMenuID=3&ArticleID=566

Новые ссылки имеют вид:

www.site.ru/2007/09/nazvanie-statii/

Сейчас правило выглядит следующим образом:

RewriteCond %{QUERY_STRING} ^(.*)ArticleID=566(.*)$

RewriteRule ^article\.php$ http://www.site.ru/2007/09/nazvanie-statii/ [R=301,L]

Результат выполнения этого правила следующий:

1. Перенаправление происходит, но!

2. Ссылка формируется с ненужным хвостом "старой ссылки", т.е. формируется ссылка следующего вида:

http://www.site.ru/2007/09/nazvanie-statii/?MenuID=2&SubMenuID=3&ArticleID=566

Как с этим бороться?

Алла Рудь
На сайте с 13.08.2014
Offline
81
#1

BeInspired, Попробуйте так:

RewriteRule ^article\.php$ http://www.site.ru/2007/09/nazvanie-statii/ [L,R=301]

или же так:

RewriteCond %{QUERY_STRING} ^\z

RewriteRule ^article\.php$ http://www.site.ru/2007/09/nazvanie-statii/? [R=301,L]

или гляньте на один из вариантов

Возможно что-то Вам подойдет.

Надежный хостинг и VPS на SSD от профессионалов HyperHost (https://hyperhost.ua/)
siv1987
На сайте с 02.04.2009
Offline
427
#2

RewriteRule ^article\.php$ http://www.site.ru/2007/09/nazvanie-statii/?

---------- Добавлено 09.11.2015 в 14:06 ----------

BeInspired:
ArticleID=566(.*)$

Не правильно. ArticleID=566(&|$)

BI
На сайте с 01.02.2011
Offline
37
#3
Алла Рудь:
BeInspired, Попробуйте так:
или гляньте на один из вариантов


Возможно что-то Вам подойдет.

Подошел один из вариантов :) По сути добавил только знак вопроса в конце ссылки-назначения и правило изначальное сделал по сути звездочкой:

RewriteCond %{QUERY_STRING} ^(.*)ArticleID=56(.*)$

RewriteRule ^.*$ http://www.pchelovodstvo.ru/2007/09/nazvanie-statii/? [R=301,L]


---------- Добавлено 09.11.2015 в 13:15 ----------

siv1987:

Не правильно. ArticleID=566(&|$)

А можете пояснить - на что влияет данная конструкция? У меня изначально был смысл, что ArticleID может встретиться как в начале списка параметров, так и в конце.

siv1987
На сайте с 02.04.2009
Offline
427
#4
BeInspired:
А можете пояснить - на что влияет данная конструкция?

Представьте что будет с вашим выражением когда сделаете редирект первой, второй и тд новости - ArticleID=1(.*)?.. Оно соответствует ArticleID=1[n-количество любых символов, в том числе цифр]

BI
На сайте с 01.02.2011
Offline
37
#5
siv1987:
Представьте что будет с вашим выражением когда сделаете редирект первой, второй и тд новости - ArticleID=1(.*)?.. Оно соответствует ArticleID=1[n-количество любых символов, в том числе цифр]

Все - понял. С учетом количества переносимых статей и того, что первая статья имеет ID=24, то проблема возникнет только для двух статей - с айдишниками 24 и 25. Сейчас ваш вариант протестирую. Спасибо, что указали на ошибку!

u3Bepr
На сайте с 03.03.2011
Offline
60
#6

а не проще так делать редирект?

Redirect 301 /old-page.html http://domain.ru/new-page.html

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