mod_rewrite + Content-Negotiation
Julius
- webserver
0 Thomas Luethi0 Julius
0 AlexW.0 Julius
Hallo,
ich will mir eine Hompega machen, bin mir aber noch nicht ganz sicher, ob ich "normales" HTML benutzen oder das HTML mit PHP generieren will. Damit ich (im Falle einer "Umentscheidung") nicht alle Links ändern muss, dachte ich an Content-Negtiation, dass ich also auf /page verlinken würde, nicht auf /page.html oder /page.php.
Apache unterstützt dieses Verfahren und das funktioniert auch so weit. Aber ich würde gerne, dass wenn jemand versucht, /page.html (oder /page.php) auzurufen, er nach /page weitergeleitet wird.
Dazu habe ich mir folgendes überlegt:
RewriteRule ^(.*).(html|php|gif|jpeg|png|txt)$ http://www.plenz.com/$1 [NS,NC,R=301,L]
Allerdings kreiert das eine Endlos-Schleife aus Redirects, erst von /page.html nach /page und von da aus wieder nach /page.html und so weiter...
Was kann ich tun? Irgendwelche Tipps, Vorschläge?
Julius
Hallo,
ich will mir eine Hompega machen, bin mir aber noch nicht ganz sicher, ob ich "normales" HTML benutzen oder das HTML mit PHP generieren will. Damit ich (im Falle einer "Umentscheidung") nicht alle Links ändern muss, dachte ich an Content-Negtiation, dass ich also auf /page verlinken würde, nicht auf /page.html oder /page.php.
Obwohl ich weiss, dass viele Puristen genau Dein Vorhaben toll finden
und sagen, dass die "Dateiendigung" aus der URL der "Ressource"
verbannt werden muesse, plaediere ich stark dafuer, die URLs
fuer (X)HTML-Ressourcen auf .html enden zu lassen.
Es hat Vorteile beim lokalen Bearbeiten und Betrachten,
und auch fuer die Benutzer, wenn sie eine oder mehrere
Deiner Seiten herunterladen (von Hand oder mit wget,
HTTrack u.s.w.) - dann funktionieren naemlich auch
alle relativen Links noch, solange die Dateien im
gleichen Verzeichnis sind.
Gerade auf dem Apachen ist es doch problemlos moeglich,
auch Dateien mit der Endigung .html durch den PHP-Parser
zu schicken.
Aber eben, es ist Geschmackssache, und Deine URLs ohne
"Dateiendigung" entsprechen auf jeden Fall den Entsprechungen
des W3C - und Du bist damit modern und cool! ;-)
RewriteRule ^(.*).(html|php|gif|jpeg|png|txt)$ http://www.plenz.com/$1 [NS,NC,R=301,L]
Allerdings kreiert das eine Endlos-Schleife aus Redirects, erst von /page.html nach /page und von da aus wieder nach /page.html und so weiter...
Sollte es eigentlich nicht.
Erstens wegen dem L ("last"), zweitens, weil Browser gemaess der HTTP Spec.
Endlosschleifen erkennen und abbrechen sollten.
Was erwartest Du beim Abruf von /page.html in dem Platzhalter $1?
Gruesse,
Thomas
Hallo,
Aber eben, es ist Geschmackssache, und Deine URLs ohne
"Dateiendigung" entsprechen auf jeden Fall den Entsprechungen
des W3C - und Du bist damit modern und cool! ;-)
Ja ;)
RewriteRule ^(.*).(html|php|gif|jpeg|png|txt)$ http://www.plenz.com/$1 [NS,NC,R=301,L]
Allerdings kreiert das eine Endlos-Schleife aus Redirects, erst von /page.html nach /page und von da aus wieder nach /page.html und so weiter...Sollte es eigentlich nicht.
Erstens wegen dem L ("last"), zweitens, weil Browser gemaess der HTTP Spec.
Endlosschleifen erkennen und abbrechen sollten.
Dillo macht das, aber Opera verfängt sich darin...
Was erwartest Du beim Abruf von /page.html in dem Platzhalter $1?
Ich erwarte sowas wie "/page" oder "page". Halt alles bis zu dem letzten Punkt (+Dateiendung).
Ich bin gerade bei einem Freund, sonst könnte ich ein Beispiel posten...
Julius
Hallo,
[...] weil Browser gemaess der HTTP Spec.
Endlosschleifen erkennen und abbrechen sollten.Dillo macht das, aber Opera verfängt sich darin...
Wenn Du schon Opera hast, dann kannst Du auch wunderbar bequem
die automatischen Weiterleitungen in Opera abschalten und dann
Schritt fuer Schritt beobachten, wohin Du jeweils umgeleitet wirst,
weil Du es naemlich manuell bestaetigen musst!
RewriteRule ^(.*).(html|php|gif|jpeg|png|txt)$ http://www.plenz.com/$1 [NS,NC,R=301,L]
Was erwartest Du beim Abruf von /page.html in dem Platzhalter $1?
Ich erwarte sowas wie "/page" oder "page". Halt alles bis zu dem letzten Punkt (+Dateiendung).
Ich gebe gerne zu, dass ich mich mit RegExp und mod_rewrite nicht
richtig auskenne. Aber ich wende diese Dinger auch nicht an... ;-)
Wenn Du "/page" erwartest, wird die URL zu http://www.plenz.com//page - nicht
unbedingt das wahre, oder?
Ich hoffe, dass Du mit Opera ein paar Erkenntnisse gewinnst!
mfg,
Thomas
Hallo,
Was kann ich tun? Irgendwelche Tipps, Vorschläge?
Setze vor die RewriteRule noch folgende Rewrite Condition (bzw. passe sie Deinen Beduerfnissen an...):
RewriteCond %{THE_REQUEST} .(html|php|gif|jpeg|png|txt) [NC]
Das überprüft, ob die Dateiendung im vom Browser angefragten Request-String drinsteht. Nach der Umleitung tut sie es ja nicht mehr -- deshalb entsteht keine Endlosschleife.
Falls Du die RegEx noch genauer spezifizieren willst (IMHO nicht noetig...), denke dran, dass in dem String nicht nur der Seitenname, sondern mehr drinsteht. Eine typische Anfrage ist "GET /index.hmtl HTTP/1.1".
Grüße, Alex.
RewriteCond %{THE_REQUEST} .(html|php|gif|jpeg|png|txt) [NC]
Das überprüft, ob die Dateiendung im vom Browser angefragten Request-String drinsteht. Nach der Umleitung tut sie es ja nicht mehr -- deshalb entsteht keine Endlosschleife.
Vielen Dank, Alex, da funktiniert wunderbar! Danke!
Julius