RewriteRule
работает только с URL-адресом , а не с запросом URL. Вам нужно использовать директиву RewriteCond
для проверки запроса URL (%{QUERY_STRING}
). Поэтому попробуйте это правило:
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([^&]+)&?(.*)?$
RewriteRule ^oldpage\.php$ http://new.example.com/newpage-%3?%1%4 [L,R=301]
Это правило также сохраняет другие параметры в запросе.