Themen
 
Individuelles Webdesign
 
01.03.2007 15:56

Saubere URLs ohne mod_rewrite

Kategorie: PHP, Tutorial
Für ein PHP-Projekt habe ich einige Zeit gerätselt wie ich am besten dynamischen Content dynamisch präsentieren, aber gleichzeitig so "hässliche" URL-Parameter-Würste vermeiden kann. Zuerst wollte ich mod_rewrite verwenden, aber es gibt eine einfachere Lösung.

Weder Menschen noch Suchmaschinen mögen "hässliche" URLs mit Parameter-Würsten. Menschen tun sich schwer sich die URL zu merken und Suchmaschinen sind bei der Indizierung ziemlich zurückhaltend.

Der meist gewählte Lösungsansatz

Bei diesem Problem ist der meist gewählte Lösungsansatz die Verwendung von mod_rewrite. Wenn das Modul aktiviert ist, lassen sich damit Requests umleiten ohne dass der Benutzer etwas davon bemerkt.

Beispielsweise kann der Request <kbd>http://www.meinedomain.com/artikel/0815</kbd> intern umgelegt werden auf <kbd>http://www.meinedomain.com/index.php?artikel=0815</kbd><kbd></kbd>

Dem Benutzer bleibt dieser Vorgang verborgen.Vermutlich wäre ich bei mod_rewrite geblieben hätte es bei dem Hoster nicht Probleme gemacht. Am lokalen Test-Server lief alles einwandfrei, aber nicht beim Provider.

Alternativlösung

Zu URL-Rewriting gibt es allerdings eine Alternative. Auf den meisten Servern befüllt PHP die globale Variable $_SERVER['PATH_INFO'].

Werden in der URL nach dem Script nicht mit Fragezeichen abgetrennte Parameter übergeben, sondern ein "Pfad", befüllt PHP die Variable mit dieser Information.

Beispielsweise wäre in dem Script "meinscript.php" die Variable $_SERVER['PATH_INFO'] mit "/artikel/0185" befüllt wenn das Script mit <kbd>http://www.meinedomain.com/meinscript.php/artikel/0815/</kbd> aufgerufen wird. Schaut doch schon viel schöner aus als <kbd>http://www.meinedomain.com/meinscript.php?artikel=0815</kbd>, oder?

Das Script muss dann nur noch die PATH_INFO nehmen, und entsprechend parsen. Ich verwende dazu einfach einfach explode.

PHP:$pathsegments = explode('/', $_SERVER['PATH_INFO']);

teilt die elemente des Pfades in das Array auf, in dem Beispiel also

[0] => 'artikel'
[1] => '0815'

Der virtuelle Pfad lässt sich so recht einfach verarbeiten.

Eines ist allerdings noch nicht schön in dem Beispiel oben: Nämlich dass die Extension ".php" mit in der URL steht.

<kbd>http://www.meinedomain.com/meinscript/artikel/0815/</kbd>

wäre schöner.

Auch das ist recht einfach. Jetzt geht's aber mehr um den Indianer als um PHP.

Ob der Aufruf von Scripts ohne Extension zulässig ist hängt von der Apache-Konfiguration ab. Dazu ist Multi-View bzw. ForceType zuständig.

Hat der Apache multi-view eingeschaltet, hat sich das Problem schon von selbst gelöst. Wird keine Extension angegeben verhandelt der Browser dann mit dem Apache welche "Version" der Datei er will. Da in unserem Fall nur ein File mit dem Namen existiert, und zwar als PHP-File wird er das nehmen. Ob Multi-View eingeschaltet ist lässt sich einfach feststellen: Einfach das Script ohne Extension aufrufen. Wird es ausgeführt, ist alles erledigt.

Wenn nicht, kommt etwas Konfiguraitonsarbeit. Entweder Multi-View wird eingeschaltet, oder es kommt ein kleines Rewrite zum Einsatz:

Diese kleine mod_rewrite regel ist nur notwendig, wenn der Apache Multi-View nicht konfiguriert hat:

In der .htaccess sind dann folgende Zeilen einzutagen:

RewriteEngine onRewriteBase /RewriteRule ^meinscript$ meinscript.php [QSA,L]
RewriteRule ^meinscript/(.*)$ meinscript.php/$1 [QSA,L]

Diese Zeilen veranlassen den Apache einen Aufruf von "meinscript" ohne Angabe von Extension intern auf meinscript.php umzulegen. Die erste RewriteRule übernimmt Aufrufe ohne nachfolgendem Pfad oder URL, die zweite mit Parametern.



Kommentare


Kommentar schreiben...


Anzeige: 1 - 10 von 10.
 
Wednesday, 07. 11 18 02:16
Adrianne Cassidy
aus Paris adriannecassidy@mailas.com    Website   

Heya i'm for the first time here. I came across this board and I
find It really useful & it helped me out a lot.
I hope to give something back and help others like you helped me.

 
Thursday, 01. 11 18 22:59
Alda Lemus
aus Santa Maria Villiana aldalemus@gmail.com    Website   

Attractive section of content. I just stujbled upon your site
and iin accession capital to assert that I acquire in fact enjoyed account your blog posts.
Any way I'll be subscribing to your augment and even I achievement you access consistently
fast.

 
Sunday, 21. 10 18 06:24
Clifton Theriot
aus Layer De La Haye clifton_theriot@inbox.com    Website   

I'll right away grasp your rss feed as I can not in finding your
e-mail subscription link or e-newsletter service. Do you have any?
Please allow me recognize so that I could subscribe. Thanks.

 
Saturday, 20. 10 18 18:53
Dominik Cabe
aus Norrtalje dominikcabe@gmail.com    Website   

An outstanding share! I've just forwarded this onto a colleague who had been conducting a little homework on this.
And he actually bought me breakfast because
I stumbled upon it for him... lol. So let me reword this....
Thank YOU for the meal!! But yeah, thanx for spending time to discuss this subject
here on your web site.

 
Friday, 21. 09 18 19:34
Jerilyn Royster
aus Bellach jerilynroyster@gmail.com    Website   

I have been examinating out a few of your posts and i can claim clever stuff.
I will definitely bookmark your website.

 
Thursday, 20. 09 18 01:09
Ron Chinnery
aus Hafnafjor?Ur ronchinnery@aol.com    Website   

Every weekend i used to pay a quick visit this site, as i wish
for enjoyment, since this this site conations actually nice funny stuff too.




Barcelona fotballdrakter 2018

 
Friday, 31. 08 18 19:03
Catharine Oliver
aus Overlida catharineoliver@gmail.com    Website   

As a Newbie, I am permanently exploring online for artucles that caan help me.
Thank you

 
Wednesday, 15. 08 18 10:53
Coy Schweizer
aus Arlanda Stad coyschweizer@gmail.com    Website   

Great post. I was checking continuously this blog
and I'm impressed! Extremely useful info specifically the last part :) I care for such
info a lot. I was looking for this particular information for a very long time.
Thank you and best of luck.

 
Monday, 06. 08 18 18:46
Numbers Shah
aus Kettenhausen numbers_shah@freenet.de    Website   

They attempt to be like everybody else.

 
Sunday, 11. 03 07 22:36
Heinz Otto
aus test heinz.otto@gmx.de    Website   

Hallo,

sie wollen eine alternative nutzen ohen mod_rewrite, nutzen unten aber für eine Umleitung auch eine solche Lösung, das macht doch keinen Sinn...

Kommentar:
Die Idee dahinter ist, dass mod_rewrite nur verwendet wird um den script-namen ohne Extension umzusetzen, nicht jedoch die Parameter dahinter. Gleiches lässst sich mit der .htacess-Option ForceType erreichen, die aber bei providern oft deaktiviert ist. Aber ich werde ein entsprechendes Beispiel hinzufügen. Dann ists komplett mod_rewrite-los ;)

 
 

Kommentar schreiben