Re:
So ein <If> hätte ich schon vor langer Zeit mal gebraucht, konnta da aber nur mit einem <IfDefine> Vorlieb nehmen.
Oh ja, dass kenne ich, die Welt an ihrem Ist-Zustand hinnehmen zu müssen. Und <IfDefine *></IfDefine>
ist genau so eine Krücke. Man muss hier sogar Einfluss haben können, Umgebungsvariablen des Serverprozesses zu bestimmen.
Aber was da mit <If ~></If>
im Anmarsch ist, erscheint mir als die heimliche Rache gegen mod_rewrite.c. Leider ist sie nicht wirklich Konsequent. Beispielsweise die folgende, fiktive Konfiguration ist für den Endnutzer nicht nicht möglich, denn die Direktive Alias verbleibt auch in der Version 2.4 im Context server config bzw. virtual host:
<If ~>
Alias /bb.php /aa.pl
</If>
Das ist um so bedauerlicher, da Entsprechungen für die Anwendung Regulärer Ausdrücke existieren (AliasMatch, RedirectMatch). Zumindest für Weiterleitungen hätte man hier ein Adäquat schaffen können. Denn die Auswertung der Bedingungen einer Anfrage sind mod_rewrite.c ebenbürtig (vgl. Expressions in Apache HTTP Server). Es mangelt nach meinen Erkenntnissen auch nicht an der Infrastruktur. Inwiefern es dann tatsächlich sinnig wäre, Funktionalität von mod_rewrite.c zu parzellieren, ist natürlich derzeit hinfällig.
mod_rewrite.c kann selbständig in die Bereiche (bzw. Teilen davon) der
- response header (flags CO, T),
- externe/interne Weiterleitungen bzw. Status (flags R, G, F; C, PT, Pfadtranskription
[default]), - Transkription der Anfrage (flags QSA, QSD, o. g. Pfadtranskription),
- Umgebungsvariablen (flag E) und
- Verarbeitungskette (flag H)
eingreifen. Für all dies bedarf es weiterer Module, wollte man es mit <If ~></If>
reproduzieren. Verschiedene Module kann man voraussetzen. Jedoch ist z. B. mod_headers.c, was man für die Manipulation von response header benötigt, leider nicht bei allen Providern zu finden. Vermutlich weil es nicht im Standardmodulsatz enthalten ist/war. Dagegen bekommt, zumindest für mich, mod_setenvif.c in Konfigurationen Handlungsspielraum, denn ich früher nicht für möglich gehalten habe:
# ein kleines Beispiel für ein Verzeichnis aus dem Downloads
# ganz ohne Programme organisiert werden soll, wobei Parameter
# "filename" dynamisch
<IF "-f %{REQUEST_FILENAME}">
SetEnvIf REQUEST_URI ".*/(.*)$" set_dl_header=$1
Header set Content-Disposition "attachment"
Header set Content-Disposition "attachment; filename=\"%{set_dl_header}e\"" env=set_dl_header
</IF>
# Vergleichbar wäre es mit der üblichen Umschreibung
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ - [L,E=set_dl_header:$1]
Header set Content-Disposition "attachment" env=set_dl_header
Header set Content-Disposition "attachment; filename=\"%{set_dl_header}e\"" env=set_dl_header
Hier ist vielleicht deutlich zu sehen, was ich oben mit einem Adäquat meinte. Auch wenn ich damit etwas weiter abschweife, bedarf es dieser Umschreibung deshalb, weil mod_headers.c auf den reich gedeckten Tisch der internen Variablen des Webservers nicht zugreifen kann, sondern zusätzlich auf mod_setenvif.c angewiesen ist. Das verstehe wer will, ich verstehe es jedenfalls nicht, - der Ist-Zustand eben. ;)
Gemeinsam ist <If ~></If>
und den Möglichkeiten von mod_rewrite.c, dass man über die Konfiguration nicht auf das request body zugreifen kann.
Fazit: Schade, schade...
Gruß aus Berlin!
eddi