XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   Fragen zu mod_rewrite, 500 error, Variablenverlust (http://xhtmlforum.de/showthread.php?t=57750)

Apache09 18.07.2009 04:44

Fragen zu mod_rewrite, 500 error, Variablenverlust
 
Hallo!
Mittels rewrite will ich folgendes erreichen:
Anfragen zu Dateien eines bestimmten Typs (z.B. png, gif, jpg,css,...) , die es im angefragten Verzeichnis nicht gibt, sollen auf das Verzeichnis /bilder umgeleitet werden, also dann /bilder/(Dateiname). Sollte die Datei dort auch nicht vorhanden sein, soll ganz normal ein 404-Fehler kommen.
Alle anderen Aufrufe sollen auf /main.php geleitet werden.
Optional will ich später noch die RewriteRule zum Aufruf von /main.php so ändern, dass grundsätzlich bestimmte Dateitypen nicht davon erfaßt werden.

Im Moment steht folgendes in meiner .htaccess-Datei:

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ([^\/]*(\.png|\.gif|\.jpg|\.css))$ /bilder/$1 [L,NS,NC]
# kann man hier auch noch eine 303-Meldung einbauen?

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ /main.php
#RewriteRule ^.*(^\.png|^\.gif|^\.jpg|^\.css)$ /main.php [NC]

1. Folgende Fehler gibt es leider:
Ist eine Datei mit png,gif,jpg oder css-Endung auch nicht im Verzeichnis /bilder vorhanden, liefert der Server einen 500-er Fehler. Sollte das nicht ein 404-er Fehler sein?
2. Versuche ich die letzte Zeile
RewriteRule ^.*$ /main.php
durch die jetzt auskommentierte Zeile zu ersetzen
#RewriteRule ^.*(^\.png|^\.gif|^\.jpg|^\.css)$ /main.php
scheint mir die RewriteRule zwar so zu funktionieren, wie sie soll, ABER bei html-submit sind die Forumlardaten weg/leer/... wenn ich in main.php darauf zugreifen will.

Kann das wirklich so schwer sein?? ):

Grüße
Dieter

mantiz 18.07.2009 06:55

Irgendwie ist alles schwer, wenn man nicht weiß wie's geht. :)

Ich bin kein mod_rewrite-Experte, aber ich versuch's einfach mal.

Zu 1:
Warum Du einen 500er bekommst weiß ich leider nicht, aber den Statuscode kannst Du mitsenden, indem Du den Flags noch ein R=303 mitgibst, also sollten die Flags dann so aussehen: [R=303,L,NS,NC]

Zu 2:
Für mich sieht die Regel so aus, als wenn sie nicht funktionieren dürfte, da das ^ für ein Zeilenanfang steht und nur bei [^] negierend wirkt, afaik, aber nun gut. :)

Für meine Begriffe müsste die Zeile so aussehen:
RewriteRule ^.*[^(?:\.png|\.gif|\.jpg|\.css)]$ /main.php [QSA]

Das Flag QSA steht für QueryStringAppend und hängt die GET-Parameter an, die Post-Daten sollten eigentlich in der PHP-Datei zur Verfügung stehen.

Gumbo 18.07.2009 11:07

Probier mal Folgendes:
Code:

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{DOCUMENT_ROOT}/bilder%{REQUEST_URI} -f
RewriteRule .*\.(png|gif|jpg|css)$ /bilder%{REQUEST_URI} [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule !.*\.(png|gif|jpg|css)$ /main.php [L]


Apache09 19.07.2009 01:12

Hallo!
Erstmal vielen Dank für die Hilfe.

Leider hat es immer noch nicht funktioniert. Die erste RewriteRule hat nur noch 404er Fehler geliefert, auch wenn die Datei im Verzeichnis /bilder lag. Die zweite RewriteRule hat genausogut bzw schlecht wie mein Vorschlag funktioniert: Einer hat auch die eigentlich ausgenommenen Endungen auf /main.php geleitet - der andere hat die ausgenommenen Endungen zwar nicht weitergeleitet, aber beim Absenden eines Formulars einer html-Datei kamen leider die Post-Variablen nicht mehr an.

Aber durch eure Vorschläge habe ich auch noch zwei Ideen bekommen, wie ich es versuchen könnte.
Beim der ersten RewriteRule könnte ich noch einbauen, dass der Pfad der angefragten Datei nicht "/bilder" sein darf. Mittels RewriteCond hat das ja leider nicht geklappt.

Aber bei der zweiten RewriteRule für /main.php werde ich per RewriteCond versuchen, dass keine Dateien auf /main.php geleitet werden, wenn sie bestimmte Endungen haben, wie .jpg, .png, ...

Ich schätze am Montag oder Dienstag werde ich dann schreiben, ob es geht.

Grüße
Dieter

P.S. Vielleicht liegt das ja auch an den Einstellungen des Anbieters. Ich bin bei 1und1. Eigentlich könnte ich dort mal den Support fragen. Vor ein paar Jahren konnte der Support mir auch mal helfen. Allerdings habe ich jetzt ein anderes Paket.

Apache09 21.07.2009 22:54

Hallo!
Keine der patterns und RewriteConditions, die ich bisher ausprobiert habe, hat bisher zu einem funktionierendem Ergebnis geführt. ):


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:22 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2023