Question Utilisation de recherches RewriteMap dans un RewriteCond. Possible?


J'essaie ce qui suit

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

J'essaie de comparer si le chemin de requête commence par les chemins valides ou non.

J'ai une longue liste de chemins dans le fichier de recherche.

S'il vous plaît aider sur ce point.


5
2018-05-18 13:30


origine


Quelqu'un s'il vous plait? - serverliving.com
Peut-être devriez-vous préciser le LookupKey : RewriteCond %{REQUEST_URI} ^/${lookup:$1} - krisFR
J'ai essayé cette approche mais je ne pouvais pas la faire fonctionner - serverliving.com
Pouvez-vous fournir un échantillon (quelques lignes) de votre lookup.txt fichier ? - krisFR
Le fichier de recherche ressemble à ceci / abc / abc - serverliving.com


Réponses:


J'ai découvert que vous ne pouvez pas avoir une variable dans le RewriteCond regex, car il semble qu'il ne soit compilé qu'une fois, mais pas à la demande.

Vous pouvez contourner ce problème en mettant à la fois ${lookup} et %{REQUEST_URI} dans une chaîne de test utilisant un séparateur (disons une virgule), puis assurez-vous qu'ils sont égaux, par exemple:

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

Notez également que, pour cet exemple d'URL donné http://mydomain.dom/abc/mypage.html :

%{REQUEST_URI} = /abc/mypage.html

mais

${lookup:$1} = abc

Alors %{REQUEST_URI} ne sera jamais égal à ${lookup:$1}.

Pour les rendre égaux à la demande, vous devez:

  • joindre ${lookup:$1} avec / obtenir /abc/ = /${lookup:$1}/
  • ajouter $2 pour obtenir également le fichier demandé: /abc/mypage.html = /${lookup:$1}/$2
  • Comme votre clé est /abc/ (et pas abc) vous devez enfermer $1 avec / pour correspondre à la clé: /${lookup:/$1/}/

Donc finalement vous aurez ceci:

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

Aller à http://mydomain.dom/abc/mypage.html me donne le journal suivant:

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

6
2018-05-19 17:06