Директива Redirect
работает только с URL-путем , но не с хостом или запросом URL.
Но это возможно с mod_rewrite :
RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} =id=1
RewriteRule ^default\.asp$ http://www.example.org/newpage.html [NC,L,R=301]
И, как уже было сказано в комментариях, вы можете использовать карту перезаписи для отображения идентификатора на псевдоним:
1 foo-page
2 bar-page
3 baz-page
…
Декларация RewriteMap
(здесь простой текстовый файл):
RewriteMap id-to-alias txt:/absolute/file/system/path/to/id-to-alias.txt
И, наконец, приложение:
RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3}&%1%4 ^([^&]+)&(.*)
RewriteRule ^default\.asp$ http://www.example.org/%1.html?%2 [NC,L,R=301]
Это также должно сохранить оставшийся запрос. Если вы не хотите этого:
RewriteCond %{HTTP_HOST} =example.org
RewriteCond %{QUERY_STRING} ^(([^&]*&)*)id=([0-9]+)&?([^&].*)?$
RewriteCond ${id-to-alias:%3} .+
RewriteRule ^default\.asp$ http://www.example.org/%0.html? [NC,L,R=301]