RewriteCond mit Alias abhängig von Existenz einer Ressource
Verfasst: 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.
dazu habe ich folgenden vhost definiert.
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.
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.
Aber so funktioniert das nicht. Stundenlanges Googeln läßt vermuten, dass ein Alias in einer RewriteCond nicht aufgelöst wird.
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
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
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>
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
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]
Code: Alles auswählen
RewriteCond /projekt_2/private/test.php -f
RewriteRule ^(.*) /projekt_2/private/test.php [L]
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