Правило перезаписи, когда источник содержит '?' [дубликат]

Почесал голову на этом. У меня есть старый URL:

     http://myserver/blog/archive?openview&type=Category&key=Demo

и новый URL

     http://myserver/blog/categories/Demo

. Я пытаюсь получить для этого правило перезаписи. Я думал, что это будет:

     ^/blog/archive\?openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]

Но это ничего не дает. Я попробовал URL и правило (замените? На /):

     http://myserver/blog/archive/openview&type=Category&key=Demo
     ^/blog/archive/openview&type=Category&key=(.*) /blog/categories/$1.html [NC,R=301,L]

И все работает, как ожидалось. Так что я немного запутался, как обращаться с? для соответствия в старом URL. Все образцы, которые я нашел, описывают противоположный случай. Отправка "красивого" URL-адреса уродливому. В моем случае "уродливый" URL - это то, что люди в прошлом добавляли в закладки, и я хочу убедиться, что они правильно получают новые данные

1
задан 25 December 2013 в 13:52
1 ответ

Немного подумав (и прочитав документацию ) позже:

При сопоставлении mod_rewrite используется только часть адреса URL. Знак "?" отмечает конец местоположения и начало параметров (также известный как QueryString). Как только я понял это, это было просто Google далеко .

Итак, чтобы преобразовать правильно, вам нужно условие перезаписи:

RewriteCond %{QUERY_STRING}     ^openview&type=Category&key=(.*)    [NC]
RewriteRule ^/blog/archive$ /blog/categories/%1.html [NC,R=301,L]

Работает как шарм

2
ответ дан 3 December 2019 в 21:22

Теги

Похожие вопросы