Переписать правило, если источник содержит «?»

Переписать правило, если источник содержит «?»

Ломаю голову над этим. У меня есть старый 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

Немного размышлений (и чтения)документация) позже:

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

Итак, для корректного преобразования вам необходимо переписать условие:

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

Работает как по волшебству

Связанный контент