Am Sonntag, den 29.11.2020, 08:25 +0100 schrieb Luca Bertoncello: > Am 29.11.2020 um 02:16 schrieb Daniel Leidert: > > Hallo Daniel > > > Du nutzt mit '=~' doch eine Regex-Abfrage. Da kannst du auch alle Schlüssel > > in > > den Regex-Ausdruck schreiben, ohne jeweils einen neuen Abschnitt schreiben > > zu > > müssen. Du kannst deinen Abschnitt sogar kürzen. Schau dir mal das 3. > > Beispiel > > unter https://httpd.apache.org/docs/2.4/de/expr.html und > > https://httpd.apache.org/docs/2.4/howto/access.html#env an. > > > > Alternativ könnte man die file() Funktion vielleicht so nutzen > > (ungetestet): > > > > <If "%{QUERY_STRING} =~ /key=(\d+)/"> > > Require expr file('keys.txt') =~ $0 > > </If> > > Ich habe so probiert. Leider geht es nicht... Apache spuckt den Fehler: > > Cannot parse expression in require line: syntax error, unexpected > T_REGEX_BACKREF, expecting T_REGEX or T_REGEX_I > > Hast du eine Idee, wie man das umschreiben kann?
Kann sein, dass der Ausdruck in Anführungszeichen stehen muss. Also so: Require expr "file('keys.txt') =~ $0" [..] > > Alternativ kannst du wahrscheinlich auch etwas mit mod_rewrite und > > RewriteMap > > basteln, wenn du die Schlüssel aus einer Datei auslesen möchtest. > > Das wäre auch eine Möglichkeit, allerdings weiß ich nicht genau, wie ich > das machen kann... > Hast du vielleicht ein Tipp, bzw. ein Beispiel? https://httpd.apache.org/docs/2.4/rewrite/rewritemap.html#txt Nur eine Idee und ungetestet(!): RewriteMap keys txt:/path/to/keys.txt RewriteCond %{QUERY_STRING} ! key= [NC,OR] RewriteCond %{QUERY_STRING} key=(\d+) [NC] RewriteCond ${keys:%1|NOT-ALLOWED} =NOT-ALLOWED RewriteRule ${REQUEST_URI} "-" [F,L] Die Idee dahinter: Wenn kein Schlüssel übergeben wurde oder falls ein Schlüssel existiert und nicht in der Map enthalten ist (in Zeile 4 ist '%1' die Backref auf den Ausdruck in der Zeile davor, ALSO DEN sCHLÜSSEL), gib den Statuscode 403 zurück. Ich habe jetzt auch gelesen, dass der reguläre Ausdruck in RewriteCond eine Perl-Regex ist. Dementsprechend könnte das in Zeile 3 funktionieren, um den längsten Treffer zu erhalten: RewriteCond %{QUERY_STRING} key=(\d+?) HTH und MfG Daniel