Descobri que você não pode ter uma variável no RewriteCond
regex, porque parece que ela é compilada apenas uma vez, mas não por solicitação.
Você pode resolver isso colocando ${lookup}
e %{REQUEST_URI}
em uma string de teste usando um separador (digamos, uma vírgula) e, em seguida, verificando se são iguais, por exemplo:
RewriteCond %{REQUEST_URI},/${lookup:/$1/}/$2 ^([^,]+),
Observe também que, para esse URL de exemplo fornecido, http://mydomain.dom/abc/mypage.html
:
%{REQUEST_URI} = /abc/mypage.html
mas
${lookup:$1} = abc
Portanto, %{REQUEST_URI}
nunca será igual a ${lookup:$1}
.
Para torná-los iguais quando solicitados, você precisa:
- coloque
${lookup:$1}
com/
para obter/abc/
=/${lookup:$1}/
- adicione
$2
para obter também o arquivo solicitado:/abc/mypage.html
= %código% - Como sua chave é
/${lookup:$1}/$2
(e não/abc/
), você precisa anexarabc
com$1
para corresponder ao Código chave%
Então, finalmente você terá isso:
RewriteMap lookup "txt:/var/www/lookup.txt"
RewriteCond %{REQUEST_URI},/${lookup:/$1/}/$2 ^([^,]+),
RewriteRule ^/(.*)/(.*)$ /a/$1/b/$2 [R=301]
Ir para /
me fornece o seguinte log:
(1) pass through /a/abc/b/mypage.html