
Ich will schöne URLs! Ich will keine Endungen, keine Fragezeichen, keine &-Zeichen! Aus einer URL wie
www.kinglee.de/test.php?bar=foo&dings=bums
sollte soetwas wie
www.kinglee.de/test/bar-foo/dings-bums/
werden. Das ist doch vieeel schöner!
In meinem Skript test.php möchte ich aber mit den $_GET Parametern arbeiten können, wie ich es von der häßlichen URL gewohnt bin. Für diese Aufgabe habe ich eine zweiteilige Lösung entwickelt. Zum einen wird die URL in der .htaccess schon ein wenig umgewandelt, um dann im PHP Skript in die endgültige Form gebracht zu werden.
Die .htaccess hat zunächst die Aufgabe den schönen Aufruf so zu zerlegen, dass aus dem /test/ ein test.php wird. Der restliche Teil kann zunächst "so
wie er ist" an test.php übergeben werden. Weitere normale GET-Parameter, die mit einem Fragezeichen angehängt werden sollten, werden auch
übergeben.
RewriteCond %{REQUEST_URI} !(\.(html?|php|png|gif|jpg|css|js|flv|swf|zip))$ [NC]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^([^/]+)(.*)$ $1.php?_p=$2&_qs=%{QUERY_STRING} [NC,L]
Wenn nun eine Anfrage an den Server gestellt wird, eine Datei mit Dateiendung auszugeben, dann greift die Umwandlung nicht! (siehe Zeile 1) Dabei spielt es keine Rolle, ob es die Datei gibt oder nicht!
Wenn nun eine Anfrage an den Server gestellt wird, ein Verzeichnis zu öffnen, dann greift die Umwandlung nur, wenn das Verzeichnis nicht doch existiert. (siehe Zeile 2)
Die Umwandlungsregeln greift und macht aus
www.kinglee.de/test/bar-foo/dings-bums/?links=rechts
dann
www.kinglee.de/test.php?_p=/bar-foo/dings-bums/&_qs=links=rechts
array(2) {
["_p"]=>
string(20) "/bar-foo/dings-bums/"
["_qs"]=>
string(12) "links=rechts"
}
Jetzt muß der $_GET Parameter nur noch umgeschrieben werden. Dazu wird der _p Teil zunächst am / und dann jedes Teilstück nochmal am - zerlegt! (Was für ein Satz!) Entsprechendes gilt für den _qs (Query String) mit den Trenner & und =.
| Longitude | 9° 12" 57,496' |
| Latitude | 48° 29" 19,845' |