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
$2para obter também o arquivo solicitado:/abc/mypage.html= %código% - Como sua chave é
/${lookup:$1}/$2(e não/abc/), você precisa anexarabccom$1para 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