Seite 1 von 1

RewriteCond mit Alias abhängig von Existenz einer Ressource

Verfasst: 13.03.2011 16:22
von nutflakes
Hallo zusammen,

ich habe eine recht komplexe Projektkonfiguration und kriege das mit mod_rewrite einfach nicht hin.
Bevor ich das ganze in die Ecke werfe, hoffe ich auf Eure Hilfe!

Die folgende Verzeichnisstruktur ist gegeben.

Code: Alles auswählen

projekt_1
    private
    public
        index.php
projekt_2
    private
        test.php
    public
dazu habe ich folgenden vhost definiert.

Code: Alles auswählen

<VirtualHost 127.0.0.1>
    ServerAdmin ...
    ServerName domain.test
    Options Indexes FollowSymLinks
    DocumentRoot "D:\pfad\projekt_1\public"
    Alias "/projekt_2" "D:\pfad\projekt_2"
    <Directory "D:\pfad\projekt_1\public">
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
Jetzt hätte ich gern folgende Regel.
Wenn ich jetzt domain.test/test.php aufrufe, dann soll automatisch /projekt_2/private/test.php eingebunden werden.
Einfacher wäre wohl zu sagen, wenn eine Datei im DocumentRoot selbst nicht existiert, prüfe in mehreren alternativen Pfaden, ob die Ressource dort existiert, falls ja, redirect darauf.

Also für einen Aufruf soll folgendes passieren. Wird eine Datei gefunden, redirect und Suche abbrechen.

Code: Alles auswählen

Aufruf: projekt.test/bla.php
-> prüfe /projekt_1/public/bla.php
-> prüfe /projekt_1/private/bla.php
-> prüfe /projekt_2/public/bla.php
-> prüfe /projekt_2/private/bla.php
-> 404 falls nicht gefunden
Für meinen Test habe ich einfach mal in den Regeln eine feste URL eingetragen.
Folgendes funktioniert, also ist die Datei vorhanden, der Alias wird aufgelöst und funktioniert auch.

Code: Alles auswählen

RewriteRule  ^(.*)  /projekt_2/private/test.php  [L]
Aber so funktioniert das nicht. Stundenlanges Googeln läßt vermuten, dass ein Alias in einer RewriteCond nicht aufgelöst wird.

Code: Alles auswählen

RewriteCond /projekt_2/private/test.php -f
RewriteRule  ^(.*)  /projekt_2/private/test.php  [L]
Wie soll ich aber meine Suche nach einer Datei einrichten, wenn die Bedingung -f über den Alias nicht funktioniert?
Da ich lokal Windows verwende, ist mir keine andere Möglichkeit als ein Alias eingefallen, um Dateien ausserhalb des DocumentRoots einzubinden.
Gebe ich in den Bedingungen statt dem Alias den vollständigen Pfad (D:\...) an, setzt mir mod_rewrite immer einen / davor, also wird es zu /d:\ und damit nicht gefunden.

Bin hier kurz davor zu verzweifeln und über jede Hilfe dankbar!

Besten Dank und beste Grüße,
Uwe