Ist jetzt auch ungetestet, wobei ich so eine Schreibweise [0-1]{1}[0-8]{1}[0-9]{1,3} auch immer erst testen muss, doch eigentlich sollte die erste Kondition von 0 bis 9999 und die zweite von 10000 bis 18999 greifen. Wäre dann saubere als die PHP Variante.
Apache Configuration
RewriteEngine on
RewriteCond %{QUERY_STRING} ^p=\d{1,4}$
RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
RewriteRule ^(.*)$ http://www.archiv.example.com/$1 [L,R=301]
RewriteCond %{QUERY_STRING} ^p=([0-1]{1}[0-8]{1}[0-9]{1,3})$
RewriteCond %{HTTP_HOST} ^www\.example\.de$ [NC]
RewriteRule ^(.*)$ http://www.archiv.example.com/$1 [L,R=301]
Eventuell aber auch eher so:
Apache Configuration
RewriteEngine on
RewriteCond %{QUERY_STRING} ^p=(\d{1,4})$
RewriteRule ^(.*)$ http://www.archiv.example.com/?p=%1 [L,R=301]
RewriteCond %{QUERY_STRING} ^p=([0-1]{1}[0-8]{1}[0-9]{1,3})$
RewriteRule ^(.*)$ http://www.archiv.example.com/?p=%1 [L,R=301]
Wie gesagt, das müsste man austesten, was da die richtige Schreibweise ist, anders wird das nichts.
Je länger ich mir das anschaue, um so mehr halte ich die letzte Schreibweise für die richtige und dann vielleicht noch jeweils mit einem abschließenden Fragezeichen, um weitere Anhänge zu vermeiden:
Apache Configuration
RewriteEngine on
RewriteCond %{QUERY_STRING} ^p=(\d{1,4})$
RewriteRule ^(.*)$ http://www.archiv.example.com/?p=%1? [L,R=301]
RewriteCond %{QUERY_STRING} ^p=([0-1]{1}[0-8]{1}[0-9]{1,3})$
RewriteRule ^(.*)$ http://www.archiv.example.com/?p=%1? [L,R=301]
Doch genau weiß man es halt erst nach einigen Tests.