PHP-basierte Alternative zu mod_rewrite
March 16th, 2004, 13:55
Marcus Völkels Blog-Eintrag ‘URL-Design’ hat mich zum Schreiben des folgenden, ursprünglich nur als Kommentar auf seinen Eintrag gedachten Artikel veranlasst - hoffe, das hilft jemanden weiter:
Wer keine Ahnung von Regular Expressions hat oder bei dem das mod_rewrite-Apache Module nicht so funktioniert, wie es sollte (z.B. bei ner ganzen Menge von Hostern mit Confixx als Administrations-Interface der Wahl), der kann sich auch einfach ein bisserl mit der Apache Server-Variable $PATH_INFO vertraut machen. Damit kann man nämlich AUCH das gewünschte Ergebnis, also besser les- und memorierbare URLs, erzielen. Ein Beispiel dazu wie folgt (PHP 4):
[php]
<?
// pathinfo-convertor
$path_first = explode(”/”,$_SERVER[PATH_INFO]);
for($i = 0; $i < sizeof($path_first); $i++) {
if(!empty($path_first[$i]))
$path[] = $path_first[$i];
}
for($i = 0; $i < sizeof($path); $i+=2) {
$$path[$i] = $path[$i+1];
//echo $path[$i].” = “.$path[$i+1].”<br>”; // debuginfo
}
?>
[/php]
Selbiges Script speichert man nun z.B. als pathinfo_parser.php, und bindet diesen per include()-Befehl in jede PHP-Datei ein, die selbige modifizierte URL-Darstellung unterstützen soll. So kann man hiermit mit ein bisschen Ahnung von PHP folgende hässliche, schlecht merkbare Adresse in einen wundervollen Prinz - äh, zauberhaufte Prinzessin - nein, auch nicht! Also eben in eine weitaus schönere, merkbare URL umwandeln:
Vorher:
http://www.meine-domain.de/users.php?id=10242041&ord=Xyl_tab_name&cat_id=Wrtlbrmpf
Nachher:
http://www.meine-domain.de/users.php/id/hans-mueller/
Andere Variante (z.B. mit einem Wildcard-Subdomain-Script):
http://users.meine-domain.de/hans-mueller/
Und um Problemen mit der Browser-Darstellung zu entgehen, kann man nun entweder absolute URLs in den <a>-tags verwenden, inkl. Domain + Co. versteht sich, oder aber, wenn man wie ich seine Daten auf dem lokalen Server vorher testet, es mit folgender Variante versuchen:
erst bei sämtlichen links folgenden quellcode einfügen:
<?=$current_location?>
und dann selbigen mittels folgendem script, welches man in jede PHP-datei einbindet, die auf diese weise (mit “schönerer” URL) angesprochen werden soll, per include() einbindet:
<?php
if($_SERVER[SERVER_NAME] != “localhost”)
$current_location = “http://www.meine-domain.de/ “;
else
$current_location = “/meine/lokale/absolute/adresse/”;?>
Hinweis: Natürlich kann man, so wie ich das bereits gemacht habe, einfach diesen Codeschnippsel zu vorhin angesprochener Datei (pathinfo_parser.php) hinzufügen, und schlägt damit zwei Fliegen auf einen Schlag
Viel Erfolg damit,
cu, w0lf.
ps: diese Lösung ist jetzt übrigens auch hier im Einsatz





