Verwenden von RewriteMap-Lookups in einem RewriteCond. Möglich?

Verwenden von RewriteMap-Lookups in einem RewriteCond. Möglich?

Ich versuche folgendes

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

Ich versuche zu vergleichen, ob der Anforderungspfad mit den gültigen Pfaden beginnt oder nicht.

Ich habe eine lange Liste von Pfaden in der Nachschlagedatei.

Bitte helfen Sie dabei.

Antwort1

Ich habe festgestellt, dass der reguläre Ausdruck keine Variable enthalten kann RewriteCond, da diese anscheinend nur einmal und nicht pro Anforderung kompiliert wird.

Sie können dies umgehen, indem Sie sowohl „als auch ${lookup}%{REQUEST_URI}in eine Testzeichenfolge mit einem Trennzeichen (sagen wir einem Komma) einfügen und dann sicherstellen, dass sie gleich sind, z. B.:

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

Beachten Sie außerdem Folgendes für die folgende Beispiel-URL http://mydomain.dom/abc/mypage.html:

%{REQUEST_URI} = /abc/mypage.html

Aber

${lookup:$1} = abc

Wird also %{REQUEST_URI}nie gleich sein ${lookup:$1}.

Um sie bei Anforderung gleich zu machen, müssen Sie:

  • schließen Sie ${lookup:$1}mit ein, um = /zu erhalten/abc//${lookup:$1}/
  • hinzufügen $2, um auch die angeforderte Datei zu erhalten: /abc/mypage.html= /${lookup:$1}/$2
  • Da Ihr Schlüssel ist /abc/(und nicht abc), müssen Sie $1mit einschließen /, damit er dem Schlüssel entspricht:/${lookup:/$1/}/

Schließlich erhalten Sie Folgendes:

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

Wenn ich zu gehe, http://mydomain.dom/abc/mypage.htmlerhalte ich das folgende Protokoll:

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

verwandte Informationen