Apache Rewrite - помещает части строки запроса в строку замены - PullRequest
0 голосов
/ 16 июня 2010

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

www.example.com / file.html? Имя пользователя = джон и число = 1234

Кому:

www.example.com / пользователей / джон

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

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

Ответы [ 2 ]

0 голосов
/ 17 июня 2010

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

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

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

0 голосов
/ 16 июня 2010
RewriteCond %{QUERY_STRING}  username=([^&]+)
RewriteRule /?file.html /users/%1 

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

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

...