Matthias: mod_Rewrite

Beitrag lesen

Folgender Sachverhalt:

  • der URL lautet: /index.php?link=irgendwas
  • der im Browser angezeigte URL soll sein: /irgendwas.htm

Das kann nicht funktionieren. Der Browser zeigt traditionell (mit Ausnahme von Frames) die angeforderte URL an. Wenn da also "/irgendwas.htm" stehen soll, muß auch "/irgendwas.htm" angefordert werden.

Das widerspricht aber Satz 1: Die URL ist dann eben _nicht_ "/index.php?link=irgendwas", sondern "/irgendwas.htm", und wird nur serverintern umgeschrieben - wovon der Browser nichts merken muß, wenn er nicht einen Redirect erhält.

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.

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", dieses Skript generiert dann wie bei Dir aus HTML-Fragmenten eine
komplette Seite und prüft dazu ob eine Datei z.B. "/pfad/irgendwas.htm" vorhanden ist und includet diese dann. Ok, klingt ünnötig kompliziert und überflüssig, aber ich gehe doch recht in der Annahme, dass dafür die Datei "/irgendwas.htm" nicht vorhanden sein muss ("/pfad/irgendwas.htm" natürlich schon)??? Und deine Regel RewriteRule ^/([^./]*).htm$ /index.php?link=$1
funktionieren müsste. Warum bekomme ich von Apache immer "Forbidden" angezeigt?
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.

Ich sitze gerade an sowas: Ein PHP-Skript includet HTML-Fragmente, welche so verteilt sind, wie es vollständige HTML-Seiten wären. Eine Rewriting-Regel setzt aber die URL um, damit das PHP-Skript zum Zuge kommt. Aus "/pfad/pfad/datei.html" wird intern "/index.pgp?/pfad/pfad/datei.html", und das PHP-Skript wertet dann den URL-Parameter aus. 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.
Sprich, es könnte doch einfach plump aus "/pfad/pfad/datei.html" immer intern "/index.pgp?/pfad/pfad/datei.html" werden und in index.php überprüft werden, ob "/pfad/pfad/datei.html" vorhanden ist.
Was spricht dagegen?
Vielleicht verstehe ich auch gar nichts mehr und bin einfach zu doof dafür :-(

Gruss,
Matthias

  • Sven Rautenberg