Damit hier nichts durcheinander kommt, mal ganz grundsätzlich: Die URL-Umschreiberei besteht aus zwei voneinander unabhängigen Teilen, der Ausgabe und der Eingabe.
Mit RewriteRule-Zeilen erledigst du die
Eingabe, d.h. ein Browser fragt nach einer "schönen" URL (/dings/bumms) und du bastelst daraus etwas Internes (/index.php?bla=dings;fasel=bumms), mit dem du weiterarbeiten kannst.
Damit der Browser aber weiss, welche URLs er anfragen soll, musst du diese zuvor im HTML-Code
ausgeben; um das obige Beispiel fortzuführen: in einer HTML-Seite muss <a href="/dings/bumms"> stehen. Das ist eine Sache, die vollkommen separat von mod_rewrite läuft, denn dieses Modul kümmert sich nur im die Eingabe.
ViperTK hat geschrieben:Im Skript muss ich dann also überall, wo ich früher z.B. [<a href="index.php?site=showdetails&id=3">] hatte, […] meine Datenbankanfrage erweitern, so dass ich dann auch an den titel komme und nicht nur an die id
Richtig.
dass ich dann sowas machen kann wie: [<a href="index.php?site=showdetails&id=3&title=dies-ist-der-titel">]?
Falsch. <a href="/showdetails/1/dies-ist-der-titel"> möchtest du haben.
Beachten solltest du ferner, dass Ein- und Ausgabe Hand in Hand arbeiten, ein eingegebener Pfad sollte schon komplett stimmen. Überprüfst du in den Pfaden nur die Artikelnummer, kann ein Scherzbold statt des eigentlichen Pfades /artikel/1234/Tolle-Geschichte-zu-Himmelpfad beispielsweise /artikel/1234/Der-Autor-dieser-Webseiten-ist-eine-dumme-Sau verbreiten, ohne, dass dein Server darauf mit einem Fehler reagiert (und das ist doch sicher falsch :). Das bedeutet, dass du in jedem Fall neben der Artikelnummer auch den (Teil-) Pfad in der Artikeldatenbank speichern musst, um ihn vergleichen zu können.
Desweiteren brauche ich doch dann sicher noch eine zusätzliche Funktion die mir aus dem Original-Titel eine URL-freundliche Version macht.
Wäre meine folgende Lösung soweit komplett?
Code: Alles auswählen
function title_to_url($title) {
$umlaute = Array("/ä/","/ö/","/ü/","/Ä/","/Ö/","/Ü/","/ß/","/&/","/
/","/\?/","/\!/","/\./","/\(/","/\)/","/\,/","/\//","/%/","/#/","/"/","/:/
","/;/");
$replace = Array("ae" ,"oe" ,"ue" ,"Ae" ,"Oe" ,"Ue" ,"ss" ,"und", "-"
,"" ,"" ,"-" ,"" ,"" ,"" ,"-" ,"" ,"" ,"" ,"","");
$title = strtolower(preg_replace($umlaute,$replace,$title));
return $title;
}
Jetzt mal abgesehen davon, dass preg_replace() eigentlich fehl am Platze, weil im Gegensatz zu
str_replace() viel zu aufwändig ist, würde ich an deiner Stelle gar keine automatische Ersetzerei benutzen, sondern einen kurzen, sinnvollen Namen von Hand eingeben.
Diese Bandwurm-Pfade haben sich in den letzten Jahren wie die Pest ausgebreitet und bieten, außer zum Behumpsen von Suchmaschinen, keinen Nutzen. Ich weiss nicht, wie es derzeit aussieht, aber ich vermute, dass Google solche URLs über kurz oder lang als das einordnet, was sie sind: Suchmaschinen-Spam.
Außerdem sehen diese verkrüppelten Sätze scheiße aus.
Da du, wie oben geschrieben, den Pfad sowieso in der Datenbank speichern müsstest, um eine Gegenprüfung zu machen, und eine Änderung wie oben sich nicht "zurückrechnen" lässt (jedes ö ist beim Kodieren ein oe, aber nicht jedes oe ist beim Dekodieren ein ö, von den gelöschten Zeichen ganz zu schweigen), also eigentlich für diese Prüfung nutzlos ist, spricht nichts dagegen, das beim Anlegen eines Artikels gänzlich von Hand zu machen.