Apache Rewrite - поместите части строки запроса в строку замены

Я хотел бы переписать:

www.example.com/file.html?username=john&number=1234

To:

www.example.com/users/джон

Но я не могу понять, как извлечь значение «имя пользователя» из строки запроса. Я гуглил это все утро и читал официальные документы, но не повезло. Мне нужно решить эту проблему перепрошивкой, а не изменением приложения.

Любая помощь высоко ценится! Ранги


person rangfu    schedule 16.06.2010    source источник


Ответы (2)


RewriteCond %{QUERY_STRING}  username=([^&]+)
RewriteRule /?file.html /users/%1 

Переход на http://example.com/file.html?username=foobar приведет к затем перенаправьте вас на http://example.com/users/foobar, добавьте [R] в конец если вам нужна внешняя переадресация.

В основном перезаписи выполняются наоборот, редко можно увидеть кого-то, кто хочет получить строку запроса во «внешних» URL-адресах, но не имеет их внутри. Или я понял ваш вопрос наоборот?

person Wrikken    schedule 16.06.2010
comment
Привет, Вриккен, спасибо за ответ. Да, я на самом деле пытаюсь сделать это в обратном направлении по сравнению с тем, что делает большинство людей! Наше старое приложение использовало строки запроса, но новое использует более чистые URL-адреса, такие как /users/foobar, поэтому я пытаюсь перенаправить запросы для старого приложения в новое приложение. - person rangfu; 16.06.2010

Хорошо, я решил это, используя два правила, хотя не уверен, что делаю это наилучшим образом.

RewriteRule ^file.html xxx/%{QUERY_STRING} [L]
RewriteRule ^xxx/[^=]*=([^&]*) /users$1 [R=301,L]

Первое правило делает строку запроса частью URL-адреса, чтобы второе правило могло ее видеть и, следовательно, сопоставлять и переписывать ее части. Я использовал «xxx», но это могло быть что угодно.

person rangfu    schedule 17.06.2010