Вот еще одна версия, чтобы получить именно то, что имел в виду ОП. Ответ @ smhmic близок к этому. Я просто предпочитаю явное начало или амперсанд, чтобы найти параметр, а не словесный подход. (Принятый ответ слишком сложен и имеет некоторые проблемы.)
RewriteCond %{QUERY_STRING} (?:^|&)tag=([^&]*)
RewriteRule ^search\.cgi$ /?s=%1 [NC,R=302]
Это говорит:
(?: )
не фиксируйте это как% число
^|&
в начале строки запроса или после амперсанда (это действует как граница слова, но особенно для URL).
tag=
параметр, который мы ищем.
( )
захватите это, в% 1.
[^&]*
ноль или более символов, не амперсанд (и остановка на амперсанде или работа до конца).