dedlfix: mod_rewrite Klarheiten

Beitrag lesen

Hi!

a) Ich lese immer wieder:

/** So transformiere ich z.B. URLs in der Art

http://localhost/abc/index.php?module=publications&action=readmore&articleID=17
zu
http://localhost/abc/artikel/17 **/


> gelesen auf: [www.tutorials.de/...](http://www.tutorials.de/hosting-webserver/261623-mod_rewrite-und-relative-pfade.html)  
  
URLs der obigen Form sind nur dann interesssant, wenn man bereits ein System hat, das mit solchen Parametern arbeitet und dieses nicht umstellen will. Wenn man neu anfängt, braucht man URLs nicht in die Querystring-Form umzubauen. Stattdessen reicht es, wenn man den Aufruf lediglich an ein Script weiterleitet. Dieses kann dann die Zusatzinformationen auswerten. Das hat den Vorteil, dass die Anzahl der Parameter beliebig sein kann und dass man das Rewriting nicht umschreiben muss, wenn sich mal was ändert. Man kommt mit  
  
  RewriteCond %{REQUEST\_FILENAME} !-d  
  RewriteCond %{REQUEST\_FILENAME} !-f  
  RewriteRule (.\*) index.php/$1 [QSA]  
  
schön übersichtlich zum Ziel. In index.php schaut man sich zunächst mit  
  
  phpinfo(INFO\_VARIABLES);  
  
an, was man übergeben bekommt, wenn man example.com/foo/bar und auch mal example.com/foo/bar?qux=baz aufruft. Je nach Serverkonfiguration findet man den interessanten Teil /foo/bar in PATH\_INFO oder einer anderen $\_SERVER-Variable. REQUEST\_URI kann man auch auswerten, aber da hängt auch der Querystring dran. Den braucht man nicht, denn man bekommt ihn wie üblich über $\_GET. Hat man nur REQUEST\_URI zur Verfügung, muss man den Querystring am ersten auftauchenden ? abschneiden. Das Auswerten von /foo/bar kann man wie folgt erledigen. Zunächst entfernt man mit trim($\_SERVER['PATH\_INFO'], '/') überflüssige / vom Anfang und Ende. Anschließend kann man mit explode() am / die Einzelteile bekommen.  
  
Das Flag [QSA] sorgt übrigens dafür, dass man außerdem noch den Querystring verwenden kann, wenn man will. Ich verwende ihn beispielsweise zur Angabe einer Sortierreihenfolge bei der Ausgabe von Massendaten.  
  
  example.com/foo/bar?sort=qux  
  
Die Daten bleiben ja die selben, nur die Darstellung ändert sich, so dass keine "komplett neue" URL gerechtfertigt ist, sondern nur eine um einen Parameter erweiterte. (Ja, ich weiß - genau genommen macht auch ein (anderer) Querystring bereits eine "neue" URL.)  
  

> oder:  
> ~~~php

 /**  

> Durch mod-rewrite wird bspw. ein Aufruf wie  
> http://www.ihredomain.tld/details.php?id=5&det=87  
>     umgewandelt zu  
> http://www.ihredomain.tld/fernseher/plasmafernseher.php  **/

gelesen auf: www.grundlagen.com/...

Müsste es nicht eigentlich genau andersrum formuliert sein? Mod_rewrite wandelt die "schönen" URL's zu den "nützlichen" um? Oder habe ich da was falsch verstanden? Es ist total Ernst gemeint, weil ich genau wegen sowas die Geschichte nicht kapiere...

Ja, oftmals wird das mit dem Umschreiben im Prinzip falsch herum formuliert. Allerdings sehen das die Autoren wohl eher von ihrer Historie her. Sie haben bisher die "nützliche" Version und schreiben ihr System so um, dass sie nun die "schönen" haben.

Lo!