Я собираюсь ответить на этот вопрос самостоятельно, потому что я столкнулся с ним и не смог найти ни одного результата Google, который мог бы помочь, поэтому, надеюсь, это может сэкономить какое-то время кому-то в будущем.
В Apache2.2 у меня есть RewriteMap, созданный таким образом, чтобы перенаправить на URL-адрес, если присутствует конкретный аргумент строки запроса:
RewriteMap redirect "txt:/etc/arbitrary1/arbitrary2/redirect.txt"
RewriteCond %{QUERY_STRING} (^|&)foo=([^&]+) [NC]
RewriteCond ${redirect:%1} !^$
RewriteRule ^.*$ ${redirect:%1} [301,L]
И /etc/arbitrary1/arbitrary2/redirect.txt
:
foo http://hello.invalid/somepath/1 # 1
bar http://hello.invalid/somepath/2 # 2
baz http://hello.invalid/somepath/3 # 3
Проблема, с которой я столкнулся, заключалась в том, что независимо от того, какой из «foo, bar, baz» я использовал, директива ${redirect:%1}
возвращала пустое значение (то есть «нет совпадения»). Это было независимо от формата redirect.txt
. СМОТРИТЕ НИЖЕ, ЧТО Я ОБНАРУЖИЛ.