Moin!
Mit anderen Worten: Du kannst mit URL-Rewriting ein URL-Schema entwerfen, welches mit der tatsächlichen Anordnung der Daten auf der Festplatte und den Skripten absolut nichts zu tun hat. Dann müssen aber auch die Links entsprechend gestaltet sein, damit die richtige URL im Browser angezeigt wird.
Intro: Mal einen Absatz im Text machen hilft, ihn beim Lesen zu verstehen und erleichtert auch das abschnittweise Zitieren. Nur so zur Info... ;)
Ok. Das will ich ja. Ich bin verwirrt. Nochmal um das klar zu stellen für mich als Beginner. Ich möchte, dass man als URL eingibt: "www.domain.de/irgendwas.htm" (und ich auch meine Verlinkungen innerhalb der Site so setzte) und das serverintern umgeschrieben wird in beispielsweise "index.php?link=irgendwas"
PUNKT. :)
Wenn du das willst, mach's doch einfach.
Und deine Regel RewriteRule ^/([^./]*).htm$ /index.php?link=$1 funktionieren müsste. Warum bekomme ich von Apache immer "Forbidden" angezeigt?
Was weiß ich, warum. Die URL muß vorher nicht existieren, aber hinterher. Zu Debugging-Zwecken empfiehlt es sich vielleicht:
1. Die Regel zu einer Redirect-Regel zu machen, also in eckigen Klammern am Ende der RewriteRule ein [R] anzuhängen. Dann siehst du, wohin die Regel dich führt, anhand der URL-Zeile.
2. Das error_log zu betrachten oder gar
3. Die Konfiguration für ein RewriteLog-File zu setzen, damit du siehst, was passiert.
Wegen Suchmaschinen und Benutzungsfreundlichkeit möchte ich nur nicht einen URL mit Parametern "/index.php?link=irgendwas" als Adresse stehen haben sondern eben einfach "/irgendwas.htm"
Wenn das nicht geht, bringt mir mod_rewrite nichts, dann kann ich auch einfach eine Datei (für jede Datei!! ugh) im root-Verz. erstellen und in dieser index.php mit $link=irgendwas aufrufen.
Doch, das geht. Es war bei mir auch etwas Gefrickel, aber letztendlich hat es hingehauen.
Zur Sicherheit wird durch eine Rewrite-Bedingung vorher geprüft, ob die HTML-Datei vorhanden ist - nur dann wird die Umschreibung gestartet. So kann niemand dem PHP-Skript URLs unterjubeln, die nicht existieren (das Skript prüft den übergebenen Parameter aber auch nochmal).
Warum ist zur Sicherheit diese Rewrite-Bedingung nötig? Wenn die Datei nicht vorhanden ist, kann man doch über das PHP-Skript die Startseite aufrufen lassen bzw. die 404-Seite wird angezeigt.
Klar könnte man es auch so machen lassen. Nur würde ohne Bedingung das Skript _immer_ aufgerufen, wenn eine ".html"-Seite auszuliefern ist. Mit Bedingung wird das auf die Fälle begrenzt, wo wirklich etwas lieferbar ist - die anderen Fälle regelt der Webserver dann selber, indem er 404 ausgibt. Was nun günstiger ist, ist eben die Frage. Ich fand meine Lösung gut, als sie mir einfiel. Das kann sich aber durchaus auch wieder ändern.
Mir gefällt einfach der Gedanke besser, daß der Webserver nicht das Skript mit irgendwelchen URLs bewirft, die nicht existieren.
Abgesehen davon ist URL-Rewriting eine ziemlich coole Sache, wenn man weiß, wie es funktioniert - und ein wenig Experimentieren steckt auch da drin.
Vielleicht verstehe ich auch gar nichts mehr und bin einfach zu doof dafür :-(
``The great thing about mod_rewrite is it gives you all the configurability and flexibility of Sendmail. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Sendmail.''
:)
- Sven Rautenberg