Usando pesquisas RewriteMap em um RewriteCond . Possível?

Usando pesquisas RewriteMap em um RewriteCond . Possível?

Estou tentando o seguinte

RewriteMap lookup "txt:D:/lookup.txt"
RewriteCond %{REQUEST_URI} ^/${lookup}
RewriteRule ^/(.*)/(.*)$ /a/$1/b/$2.html [PT,L]

Estou tentando comparar se o caminho da solicitação está começando com os caminhos válidos ou não.

Tenho uma longa lista de caminhos no arquivo de pesquisa.

Por favor, ajude nisso.

Responder1

Descobri que você não pode ter uma variável na RewriteCondregex, porque parece que ela só é compilada uma vez, mas não por solicitação.

Você poderia contornar isso colocando ambos ${lookup}e %{REQUEST_URI}em uma string de teste usando um separador (digamos uma vírgula) e depois certificando-se de que eles são iguais, por exemplo:

RewriteCond %{REQUEST_URI},/${lookup:/$1/}/$2 ^([^,]+),\1

Observe também que, para este URL de amostra fornecido http://mydomain.dom/abc/mypage.html:

%{REQUEST_URI} = /abc/mypage.html

mas

${lookup:$1} = abc

Então %{REQUEST_URI}nunca será igual a ${lookup:$1}.

Para torná-los iguais quando solicitado, você deve:

  • coloque ${lookup:$1}com /para obter /abc/=/${lookup:$1}/
  • add $2para obter também o arquivo solicitado: /abc/mypage.html= /${lookup:$1}/$2
  • Como sua chave é /abc/(e não abc), você precisa codificar $1para /corresponder à chave:/${lookup:/$1/}/

Então finalmente você terá isso:

RewriteMap lookup "txt:/var/www/lookup.txt"
RewriteCond %{REQUEST_URI},/${lookup:/$1/}/$2 ^([^,]+),\1
RewriteRule ^/(.*)/(.*)$ /a/$1/b/$2 [R=301]

Indo http://mydomain.dom/abc/mypage.htmlme dá o seguinte log:

(1) pass through /a/abc/b/mypage.html

informação relacionada