.htaccess перенаправить старую структуру на новую - PullRequest
0 голосов
/ 17 апреля 2020

Старая страница имеет такую ​​структуру:

https://blabla.bla/?k00,category-name

... и структура новой страницы выглядит следующим образом:

https://blabla.bla/category-name-c-00/

Где 00 в данном случае - это категория dynamici c id и c является c. Как перенаправить все запросы?

Я думаю, что вопросительный знак в старой структуре url сложно, как будто есть ключ, но нет значения.

Я пытался так:

RewriteRule ^\?k(\d+),([a-zA-Z0-9_-]+)$ /$2-c-$1/ [L,NC]

... но это не работает (если я удаляю вопросительные знаки из URL и переписываю правило, это работает). Любые предложения?

РЕДАКТИРОВАТЬ: я пытался сначала удалить вопросительный знак, а затем переписать, как это:

RewriteCond %{QUERY_STRING} ^(.+)$
RewriteRule ^(.*)$ $1%1?
RewriteRule ^k(\d+),([a-zA-Z0-9_-]+)$ /$2-c-$1/ [L,NC]

htaccess тестер показывает, что первые две строки в порядке, но третья "Это правило не был встречен ". Может быть, какой-то флаг отсутствует? У меня нет больше идей: /

1 Ответ

0 голосов
/ 20 апреля 2020

Для этого не нужно сначала удалять вопросительный знак или что-либо подобное.

RewriteCond %{QUERY_STRING} ^k(\d+),([a-zA-Z0-9_-]+)$
RewriteRule ^$ /%2-c-%1? [R=301,L]

RewriteCond для сопоставления цифр и имени категории в строке запроса.

Соответствие RewriteRule включено только полностью пустой путь запроса и перезаписывает новый URL-адрес, собранный на основе обратных ссылок из RewriteCond.

? в конце, так что исходная строка запроса отбрасывается вместо добавления к новый URL.

Флаги R=301 для постоянного перенаправления (Совет: если вы сначала используете 302 во время тестирования, у вас меньше шансов ввести в заблуждение из-за старых неправильных перенаправлений, которые ваш браузер мог кэшировать), и L чтобы исключить любые следующие правила, которые могут быть применены в этой итерации.

...