Forum: PC-Programmierung mod_rewrite Frage


von Lukas K. (carrotindustries)


Lesenswert?

Hallo Zusammen,
ich Stehe vor folgendem Problem:
In einem Verzeichnis, nennen wir es /bar, existiert eine Datei Namens 
foo. Ich möchte auf diese via HTTP mit /foo zugreifen. mod_rewrite soll 
also zuerst nach der Datei im Verzeichnis / suchen, falls sie dort nicht 
existiert, soll die entsprechende Datei unter /bar gesucht werden.

MfG Lukas

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Ich check zwar nicht warum alle Welt immer auf dieses Foo/Bar Quatsch 
steht, daher kann ich nur mit einem "normalem" Beispiel dienen ;)
1
#Weiterleitung für default Files
2
RewriteCond %{REQUEST_FILENAME} !-f
3
RewriteRule ^css/(.+)$ default/css/$1 [L]

von Lukas K. (carrotindustries)


Lesenswert?

Danke, das ganze hat bei mir noch einen kleinen Schönheitsfehler:
Wenn die angefragte Datei in keinem der Verzeichnisse existiert kommt 
ein unbeholfener 500 Internal server error statt ein 404 :(
'Ne Idee wie man das beheben kann (hab von mod_rewrite und regex nahezu 
keine Ahnung und weiß nicht, mit was ich google füttern soll)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Das sollte eigentlich nicht sein, wenn die Datei nicht existiert solle 
ein 404 Fehler geliefert werden, zeig doch mal deine htaccess Datei.

Luk4s K. schrieb:
> hab von mod_rewrite und regex nahezu
> keine Ahnung und weiß nicht, mit was ich Google füttern soll
Na z.B. mit "htaccess modrewrite" oder "Regularexpressions" da gibt es 
hunderte von Tutorials, Websites und Beispielen...

von Lukas K. (carrotindustries)


Lesenswert?

Hier die .htaccess:
1
RewriteEngine on
2
RewriteCond %{REQUEST_FILENAME} !-f
3
RewriteRule ^(.+)$ ablage/$1

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Da fehlt das [L] für leave = Bei matching dieser Regel beenden, so 
erzeugst du eine Endlosrekursion wenn die Datei nicht existiert!
(siehe obiges Beispiel)

von Lukas K. (carrotindustries)


Lesenswert?

Nun sieht die .htaccess so aus:
1
RewriteEngine on
2
RewriteCond %{REQUEST_FILENAME} !-f
3
RewriteRule ^(.+)$ ablage/$1  [L]
Und es gibt bei nicht existierender Datei immer noch einen 500 error.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Funktioniert es den schon für existierende Dateien. Jeweils in dem einen 
oder dem anderen Ordner?

Fehler 500 deutet meist darauf hin, das du noch Optionen setzen musst 
wie z.B. RewriteBase o.ä.

von Lukas K. (carrotindustries)


Lesenswert?

Läubi .. schrieb:
> Funktioniert es den schon für existierende Dateien. Jeweils in dem einen
> oder dem anderen Ordner?

Ja, die Umleitung funktioniert, nur wenn die Datei in keinem der beiden 
Ordner ist gibt es den 500 Fehler.
Beispiel:
Datei gluc.png liegt im Order /
http://0x83.eu/gluc.png
Datei tdr.png liegt im Order /ablage
Geht so: http://0x83.eu/ablage/tdr.png
So auch: http://0x83.eu/tdr.png
Bei einer nicht existenten Datei:
z.B. http://0x83.eu/gibtnsnich -> 500

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Möglichwerweise macht es Probleme das du da im root Verzeichnis 
operierst. Hast du es mal in einem Unterordner probiert?
Ich könnte mir nämlich noch vorstellen, das der Server ggf. eine 404 
Fehlerseite im rootfolder sucht, du durch deine mod_regel allerdings 
alle Dateinamen/Dateien erfasst.

Du könntest auch mal folgende Abwandlung versuchen
1
RewriteEngine on
2
RewriteCond %{REQUEST_FILENAME} !-f
3
RewriteRule ^(.+)\.png$ ablage/$1.png  [L]
Das sollte dann nurnoch auch PNG Dateien Einfluss haben.

von Lukas K. (carrotindustries)


Lesenswert?

Das wäre eigentlich nicht Sinn der Übung, nur einen bestimmten Dateityp 
umzuleiten.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Naja solange du keinen Zugriff auf das mod_rewrite debug/error Modul hat 
muß man aber erstmal schauen wo das Problem liegt/liegen könnte... 
Optimieren kann man dann immer noch.

Man könnte nämlich wenn es das Problem ist, folgendes versuchen
1
RewriteEngine on
2
RewriteCond %{REQUEST_FILENAME} !-f
3
RewriteRule ^ablage/(.+)$ ablage/gibtesgarantiertnicht.htmlpgztz  [L]
4
RewriteCond %{REQUEST_FILENAME} !-f
5
RewriteRule ^(.+)$ ablage/$1  [L]

von Lukas K. (carrotindustries)


Lesenswert?

Danke, so bin ich zufrieden :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.