Uso de búsquedas de RewriteMap en RewriteCond. ¿Posible?

Uso de búsquedas de RewriteMap en RewriteCond. ¿Posible?

Estoy intentando lo siguiente

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

Estoy tratando de comparar si la ruta de la solicitud comienza con las rutas válidas o no.

Tengo una larga lista de rutas en el archivo de búsqueda.

Por favor ayuda con esto.

Respuesta1

Descubrí que no se puede tener una variable en la RewriteCondexpresión regular, porque parece que solo se compila una vez, pero no por solicitud.

Podrías solucionar esto colocando ambos ${lookup}y %{REQUEST_URI}en una cadena de prueba usando un separador (digamos una coma) y luego asegurarte de que sean iguales, por ejemplo:

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

También tenga en cuenta que, para esta URL de muestra dada http://mydomain.dom/abc/mypage.html:

%{REQUEST_URI} = /abc/mypage.html

pero

${lookup:$1} = abc

Entonces %{REQUEST_URI}nunca será igual a ${lookup:$1}.

Para igualarlos cuando se soliciten, hay que:

  • encerrar ${lookup:$1}con /para obtener /abc/=/${lookup:$1}/
  • agregar $2para obtener también el archivo solicitado: /abc/mypage.html= /${lookup:$1}/$2
  • Como su clave es /abc/(y no abc), debe adjuntarla $1para /que coincida con la clave:/${lookup:/$1/}/

Entonces finalmente tendrás esto:

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

Ir a http://mydomain.dom/abc/mypage.htmlme da el siguiente registro:

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

información relacionada