Seite 1 von 1

artikel.php?id=14472 -> artikel/titel-des-eintrags-14472

Verfasst: 11.05.2010 17:47
von ViperTK
Hab jetzt folgende RewriteRules erstellt.

Code: Alles auswählen

RewriteEngine on
RewriteRule ^([^/.]+)$ $1.php [L]
RewriteRule ^([^./]+)/([^/.]+)$ $1.php?site=$2 [L]
Damit kann ich jetzt beispielsweise
index.php?site=showdetails&id=1
in
/index/showdetails/1

Jedoch hätte ich jetzt dazu eine Frage, über die ich schon länger am senieren bin, jedoch immernoch nicht wirklich weiss wie dafür die RewriteRule aussieht bzw. wie man das ganze überhaupt handhabt.

Code: Alles auswählen

http://www.domain.de/artikel/14472/css-interview-mit-kai-kai-schafer-man-kann-nie-genug-fur-die-eps-vorbereitet-sein_css/
Wie bekomme ich eine solche RewriteRule hin?
Bzw. weiss ich ja, dass die dort zu sehende URL einfach nur unsichtbar für uns User weitergeleitet wird an beispielsweise an

Code: Alles auswählen

http://www.domain.de/artikel.php?id=14472
Was ich mir allerdings noch nicht erklären kann, wie ich aus der id 14472 dann den Title bekomme, den ich dann mit in die neue statische URL einfüge?
Was muss ich hierfür vll sogar an der artikel.php ändern, oder wie kann man das ganze überhaupt angehen und umsetzen?

Ich bedanke mich wieder einmal recht herzlich im Voraus bei allen die evtl. einen Tip für mich bereit haben.

Liebe Grüße
ViperTK

Re: artikel.php?id=14472 -> artikel/titel-des-eintrags-14472

Verfasst: 26.07.2010 12:37
von quetschke
Manchmal wäre es schon schön, wenn man sich vorher einmal etwas in das Thema einliest, zu dem man eine Frage stellt. Dann hättest du nämlich recht schnell herausgefunden, dass mod_rewrite *nicht* deine eigentlichen Links ändert, sondern nur dem Server übermittelte Anfragen umschreiben kann. Du musst also erst in deinen Scripten die URLs in das neue Layout ändern. Dann kann dir mod_rewrite helfen, dass der Server auch weiß, was er mit diesen neuen URLs - die es ja eigentlich nicht gibt - anfangen soll.
Das ginge dann so:

Code: Alles auswählen

RewriteEngine On
RewriteRule ^artikel/([0-9]+)(/[^/]+)?/?$ artikel.php?id=$1 [L]
Ob der Titel-Name zur ID passt, kann so einfach mit mod_rewrite nicht geprüft werden. (Man könnte aufwendig etwas mit einer RewriteMap machen, das wäre aber umständlich und unhandlich.)
Daher schreibt die genannte Regel sowohl artikel/1234 als auch artikel/1234/echter-name/ und artikel/1234/falscher-name/ auf artikel.php?id=1234 um. Du solltest also im PHP-Script selbst noch einmal mithilfe von preg_match und $_SERVER['REQUEST_URI'] prüfen, ob der korrekte Name übermittelt wurde und - wenn nicht - einen 301-Redirect auf die korrekte Adresse durchführen, um Duplicate-Content zu vermeiden.