Hallo Forum,
da ich mich in letzter Zeit vermehrt mit ModRewrite und HTTP-Codes beschaeftigt habe, wuerde ich hier gerne einmal fachmaennisch ueberpruefen lassen, ob ich alles korrekt umsetze oder doch noch ein paar Verstaendnisprobleme habe.
Primaer gehts es um Language-Negotiation, aber auch um Standard-Requests.
In meinem Beispiel benoetigt die Seite example.org stets eine Sprachangabe in Form von example.org/de - eine Root-Seite ohne Sprachangabe existiert folglich nicht.
Nochmal zur Uebersicht die HTTP-Response-Codes:
200 - OK
301 - moved permanently
302 - found
404 - not found
403 - forbidden
1. Initial, ohne Sprach-ISO
example.org --> 301 --> example.org/en
Hierbei wird die Client-Sprache ausgelesen.
Ist das OK wenn keine tatsaechliche Root-Seite existiert (also nur ausschlieszlich mit Sprach-ISO)?
2. Normal, mit gueltigem Sprach-ISO
example.org/en --> 200
Alles fein.
3. Mit falscher/keiner Sprache
example.org/ws/test --> 301 --> example.org/en/ws/test --> 404
Da der Server keine gueltige Sprache findet, fuegt er sie hinzu (auch hier wird Client ausgelesen).
Anschlieszend wird festgestellt, dass die Seite nicht existiert.
Hier wuerde ich gerne bereits beim ersten Redirect (mittels PHPs header) einen 404er als Code angeben, aber das fuehrt zu Problemen, da der Apache an dieser Stele den Request bereits abgearbeitet hat und die ErrorDocument-Angaben somit auszer Kraft gesetzt wurden.
4. Zugriff auf existierenden Ordner
example.org/gui --> 301 --> example.org/gui/ --> 403
Apache erkennt, dass gui ein existierender Ordner ist und fuegt den abschlieszenden Slash hinzu, anschlieszend wird ein forbidden geschmissen
5. Zugriff auf nicht existierenden Ordner
Identisch mit Punkt 3.
6. Zugriff auf existierendes File
example.org/gui/images/test.png --> 200
7. Zugriff auf nicht existierendes File
example.org/gui/images/test2.png --> 404
Und hier meine .htaccess
RewriteEngine on
RewriteBase "/"
Trailing Slashes entfernen (nur wenn kein existierendes Verzeichnis)
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ http://example.org/$1 [R=301,L]
Redirect ohne www
RewriteCond %{HTTP_HOST} ^www.example.org [NC]
RewriteRule ^(.*) http://example.org/$1 [R=301,L]
Exisiterende Files und Ordner stehen Auszen vor
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
Nicht existierende Files stehen Auszen vor
RewriteCond %{REQUEST_URI} !.
Alle anderen Requests werden an den RequestHandler weitergeleitet
RewriteRule ^(.*)$ index.php [L,QSA]
ErrorDocument 401 /Error/Index/401
ErrorDocument 403 /Error/Index/403
ErrorDocument 404 /Error/Index/404
Fallen euch unter dieser Konfiguration signifikante Probleme auf, oder evtl. Sachen die man verbessern oder vereinfachen koennte?
Vielen Dank schon mal im Voraus.
Mit freundlichen Grueszen,
Guenter