Переписать строку запроса

У меня есть этот URL:

oldsite.com/profile.php?uid=10

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

newsite.com/utenti/10

Как я могу это сделать?

ОБНОВЛЕНИЕ: я написал это:

RewriteCond %{QUERY_STRING} ^uid=([0-9]+)$
RewriteRule ^profile\.php$ http://www.newsite.com/utenti/$1 [R=301,L]

Но $ 1 соответствует полной строке запроса, а не только идентификатору пользователя.


person collimarco    schedule 07.08.2009    source источник


Ответы (2)


Чтобы использовать совпадения в условиях перезаписи, вы должны использовать% 1 вместо $ 1. Кроме того, если вы хотите удалить остальную часть строки запроса, вам нужно добавить?

RewriteCond %{QUERY_STRING} ^uid=([0-9]+)$
RewriteRule ^profile\.php$ http://www.newsite.com/utenti/%1? [R=301,L]
person Vinko Vrsalovic    schedule 07.08.2009

$ n относятся только к совпадениям директивы RewriteRule. Используйте % n для ссылки на совпадения соответствующей директивы RewriteCond.

Дополнительно необходимо указать пустой запрос для подстановки. В противном случае будет использован исходный запрос.

И если вы хотите, чтобы остальная часть запроса оставалась нетронутой, используйте это правило:

RewriteCond %{QUERY_STRING} ^(([^&]*&)*)uid=([0-9]+)(.*)
RewriteRule ^profile\.php$ http://new.example.com/utenti/%3?%1%4 [R=301,L]
person Gumbo    schedule 07.08.2009