Aktionen in Abhängigkeit von Dateirechten

Perlig > Projekte > Apache HTTP Server > Aktionen in Abhängigkeit von Dateirechten

de

Das Modul mod_rewrite war schon von jeher ein Tausendsassa. Es gibt fast nichts, was dieses Modul mit URLs nicht anstellen kann. URLs können unsichtbar umgebogen werden, mittels Proxy-Modul von einem anderen Server integriert werden, in Abhängigkeit von verschiedenen Bedingungen auf unterschiedliche Ressourcen zeigen und noch vieles mehr.

Mit der Version 2.2 wurde das Repetoire u.a. um ein Testmuster für die Direktive RewriteCond und um ein Flag für die Direktive RewriteRule erweitert, die in Kombination eine interessante neue Funktionalität bereitstellen. Sie erlauben die Auführung von Dateien in Abhängigkeit von den gesetzten Rechten.

Natürlich ist es auch bisher schon möglich, in normalen Verzeichnissen (also ausserhalb von CGI-Verzeichnissen) Dateien ausführen zu lassen. Dies geschieht üblicherweise durch Zuordnung der betreffenden Dateiendung zum entsprechenden Handler. Sollen beispielsweise alle Dateien mit der Endung .pl als CGI-Skript interpretiert werden, so schreibt man:

<Directory xyz>
Options +ExecCGI
AddHandler cgi-script .pl
</Directory>

Läßt sich die Ausführung von Dateien nicht über die Namensendung steuern, dann kann man die betreffenden Dateien auch mittels des <Files>-Containers eingrenzen. Das folgende Beispiel erfasst alle mit "my-" beginnenden Dateien:

<Files my-*>
Options +ExecCGI
SetHandler cgi-script
</Files>

Solange es sich nur um wenige Dateien handelt, ist diese Methode überschaubar und leicht zu konfigurieren. Je mehr Dateien es jedoch werden, die sich nicht durch eine Namensendung erfassen lassen, desto unhandlicher wird die Konfiguration jedoch. Wäre es nicht viel einfacher, der Datei schlicht Ausführungesrechte zu vergeben, so wie man dies beispielsweise vom Unix-Dateisystem her kennt? Dort nämlich wird eine Datei genau dann ausgeführt, wenn das x-Bit gesetzt ist.

Genau dieses erlauben nun die beiden Erweiterungen von mod_rewrite. Die neue Testbedingung ermöglicht die Abfrage der Ausführungsrechte einer Datei und das neue Flag erlaubt die Zuordnung eines Handlers.

Beispiel

<Directory xyz>
Options +FollowSymlinks +ExecCGI
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -x
RewriteRule ^ - [H=cgi-script]
</Directory>

Die erste Zeile legt hierbei fest, dass in dem betreffenden Verzeichnis RewriteRules und CGI-Programme ausgeführt werden dürfen. 'Options +FollowSymlinks' gibt eigentlich an, dass symbolische Links verfolgt werden sollen. Zudem ist es aber auch (im Directory-Kontext) notwendige Voraussetzung für die Verwendung von RewriteRules.

Die zweite Zeile aktiviert die RewriteEngine. Ab jetzt werden RewriteRules auch ausgeführt.

Die dritte Zeile definiert die Prüfbedingung. Die nachfolgende Anweisung wird nur ausgeführt, wenn die Bedingung erfüllt ist. Geprüft wird der Dateiname daraufhin, ob für die Datei Ausführungsrechte gesetzt sind. Der Dateiname wird durch die Variable REQUEST_FILENAME angegeben. Bei Ausführung nimmt diese Variable den Namen der Datei an, die der angeforderten URL entspricht. Der Test auf Ausführungsrechte wird durch die neue Prüfbedingung -x definiert.

Und in der letzten Zeile schließlich, die eben nur zum Zuge kommt, wenn die vorige Bedingung erfüllt ist, also die Datei ausgeführt werden darf, wird der Handler gesetzt. Die RewriteRule erfaßt dabei mit ^ alle URLs in diesem Verzeichnis, ändert sie jedoch nicht (was durch den Bindestrich als zweiten Parameter angegeben wird), sondern setzt nur das Flag H. Dieses gibt einen Handler an, der die Datei bearbeiten soll. Der entsprechende Handler wird dem Flag nach dem Gleichheitszeichen mitgegeben, in diesem Fall also der Handler cgi-script.

Diese vier Zeilen weisen den Apache also an, alle Dateien als CGI-Script zu betrachten und auszuführen, die Ausführungsrechte besitzen. Diese Ausführungsrechte können von System zu System unterschiedlich definiert sein. Auf Unix- und Unix-ähnlichen Sytemen geschieht dies zum Beispiel durch Setzen des x-Bits.