Правила перенаправления (и перезаписи) должны указываться с наиболее ограничивающим соответствием, а затем с более разрешающим (сверху вниз в файле конфигурации).
В вашем конкретном случае вы упоминаете, что есть некоторыестрока после цифр.Поэтому вы можете изменить свою конфигурацию следующим образом:
RedirectMatch 301 "^/audios/393/.*$" "/artists/a/1849"
RedirectMatch 301 "^/audios/3933/.*$" "/artists/b/1850"
Если вам нужна строка, которая следует за цифрами, используйте эту конфигурацию:
RedirectMatch 301 "^/audios/393/(.*)$" "/artists/a/1849/$1"
RedirectMatch 301 "^/audios/3933/(.*)$" "/artists/b/1850/$1"
Где $1
будет заменено настрока, ограниченная круглыми скобками..*
означает «любой символ (.
), повторяется от 0 до n раз (*
).
Для строки запроса RedirectMatch
является частным случаем директивы Redirect
. В документации Redirect
(https://httpd.apache.org/docs/2.4/mod/mod_alias.html#redirect), вы можете прочитать:
Это включает в себя запросы с параметрами GET, например http://example.com/service/foo.pl?q=23&a=42,, оно будет перенаправлено на http://foo2.example.com/service/foo.pl?q=23&a=42. Обратите внимание, что сообщения POST будут отброшены.
Таким образом, строка запроса добавляется автоматически (GET).
Если вы этого не хотите, вы можете использовать RewriteRule
вместо этого с флагом [QSD]
, поскольку целевой URL не содержит строку запроса. Этот флаг не добавит строку запроса к целевому URL.
Конфигурация будет выглядеть следующим образом:
RewriteEngine On
RewriteRule "^/audios/393/.*$" "/artists/a/1849" [R=301,L,QSD]
RewriteRule "^/audios/3933/.*$" "/artists/b/1850" [R=301,L,QSD]
Использование скобок и $1
работает так же с RewriteRule
, если вам это нужно.