Sven Rautenberg: mod_rewrite / Hilfe bei RewriteRules

Beitrag lesen

Moin!

Ich möchte gerne, dass die .htaccess in meinem Root-Verzeichnis folgende Dinge per Rewrite erledigt:
-------------- Redirects --------------

  1. Trailing Slashes sollen entfernt werden
  2. mehrere mehrfach vorkommende Slashes sollen jeweils auf einen reduziert werden
  3. irgendwelche Dateiendungen, bzw. generell einfach alles ab einem Punkt '.' in der URL soll entfernt werden

Das sind alles recht komplexe Operationen, die aber ja nicht als Default vorkommen - weil du deine URLs ja nicht so gestaltest, dass sie deinen eigenen Regeln widersprechen.

Deshalb würde ich diesen ganzen Schmodder aus dem Rewriting raushalten und explizit in den Code tun, welcher...

-------------- ohne Redirect --------------
4. alle Requests sollen an eine Datei, z.B. start.php weitergeleitet werden

alle deine Requests ohnehin analysieren muss, und der dann ggf. anstelle einer geforderten Seite einen Redirect ausspuckt.

Ist zwar im Endeffekt unnütze doppelte Arbeit, weil der Redirect natürlich nahezu instant wieder genau dasselbe Skript ausführt, was aber ja blöderweise erneut eingelesen, geparst und ausgeführt werden muss, aber was tut man nicht alles für die URL-Reinheit...

...beispielsweise könnte man anstelle eines Redirects auch mit einem 404 antworten - schließlich sind deine eigenen URLs ja alle existent und führen zu Seiten - und wenn sich irgendwer URLs ausdenkt und sich vertippt, dann sollte er das auch feststellen. URLs tippt man heutzutage doch sowieso nur noch ein, wenn sie kurz sind und nicht in der History stehen. Ansonsten klickt man auf Googles Suchergebnisse oder die Seitennavigation.

Und für spezielle, "nette" URLs, die sich für Sonderverwendung in Radiowerbung, Papierwerbung oder Real-Welt-Werbung eignen soll, baut man explizite Redirects auf die zugehörige korrekte URL, sofern das unbedingt sein muss, weil es sonst die Site-Struktur zerhaut.

Zur Erläuterung:
Die Punkte 1-3 dienen in erster Linie dem "Komfort" des Users, sprich sollen u.a. Tippfehler durch manuelle Eingabe "ausbügeln".

Es gibt ja das Modul "mod_speling", welches dann anspringt, wenn die tatsächliche URL nicht gefunden wird, indem der Server dann nach ähnlichen Dateinamen sucht - GroßKleinSchreibung auswechselt, ggf. Zeichen weglässt, etc.

Hat zur Folge, dass man als Ersteller von Webseiten nicht auf den ersten Blick sieht, wo man Tippfehler gemacht hat, die einen dann aber böse beißen, sobald der Server mal gewechselt wird, der kein mod_speling hat. Und so wahnsinnig performant ist das auch nicht wirklich.

Punkt 4 ist letztlich der eigentlich wichtigste, da sämtliche Requests über meine Startdatei laufen sollen.

Generell soll natürlich auch vermieden werden, dass eine Resource unter mehr als einer URL erreichbar ist - Stichwort "Dublicate Content". Insbesondere im Root-Verzeichnis.

Du überbewertest Googles Rating solcher Ereignisse.

Sowas ergibt sich gar nicht erst, weil du ja ein vernünftiges URL-Schema erdacht hast, welches jede URL eindeutig zu einem Content mappt - was wiederum das Kriterium ist, ob die URL existiert.

Eigentlich wäre mir auch am liebsten, dass man im Root-Verzeichnis "manuell" gar keine Datei aufrufen kann, wobei ich mir nicht ganz im Klaren darüber bin, ob das wirklich geht, bzw. sinnvoll ist? Zwar liegen eben fast alle anderen Files in separaten Directories, aber für die Bots bspw. gibt es natürlich eine robots.txt!

Glaube nicht, dass das sinnvoll ist. Dass auf dem Server keine beliebige Unordnung entsteht, ist die Aufgabe des Webmasters, mutmaßlich also deine. Und wie Google zum Inhalt von "robots.txt" kommt, ist vollkommen dir überlassen. Wenn du es toll findest, für diesen garantiert auftretenden Fall (übrigens genauso garantiert auftretend, wie Requests nach "favicon.ico") in dein PHP-Skript eine Sonderbehandlung reinzucoden, inklusive passendem Handling des Content-Typs, darfst du gerne sämtliche URLs vollkommen von der Existenz realer Dateien loslösen.

Ich denke nur, dass das nicht wirklich zielführend ist, zumal der Webserver sowas deutlich effizienter ausliefern kann - ohne Skriptaufruf.

Und da ich ja weiß, dass wir hier bei SELFHTML sind, hier mein bisheriger "Entwurf" der .htaccess:

Boah, da erkenne ich auf den ersten Blick absolut gar nichts, was da mit der URL angestellt wird. Und das ist schon mal ein schlechtes Zeichen, denn diese Frage stellt sich irgendwann im Laufe der Lebensdauer des Projekts. Und da wäre es dann deutlich angenehmer, wenn die diversen Umwandlungen der URL sich in dokumentiertem PHP-Code abspielten, anstelle in eher undokumentierten RewriteRules und RewriteConds.

- Sven Rautenberg