RewriteCond mit Alias abhängig von Existenz einer Ressource

URLs umschreiben, umleiten, blocken oder sperren - all das und noch viel mehr kann mit mod_rewrite erreicht werden. Mit regulären Ausdrücken, Conditions und Rules stehst Du auf Kriegsfuss? mod_rewrite macht nicht das was Du willst, oder funktioniert gar nicht? hier bist Du richtig!

Moderatoren: Bob, Super-Mod

RewriteCond mit Alias abhängig von Existenz einer Ressource

Beitragvon nutflakes » 13.03.2011 16:22

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
nutflakes
.
.
 
Beiträge: 1
Registriert: 13.03.2011 15:41

Zurück zu mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron