Also, wie funktioniert das nun eigentlich?
Dazu muss ich etwas weiter ausholen. Benötigt wird hierbei ein Apache-Server mit aktiviertem mod_rewrite-Modul. Dieses Modul ermöglicht es, so genannte Rewrite-Regeln zu erstellen, welche dazu dienen bestimmte oder auch alle URLs umzuleiten.
Also, eigentlich ganz einfach, oder?
Wie funktionieren diese Rewrite-Regeln?
Genau wie eine if()-Bedingung bei PHP. Wenn eine vorher definierte Bedingung eintritt, dann mach was. Dabei kann die Bedingung auch Ausnahmen enthalten. Also wenn Bedingung A eintritt, aber Ausnahme B und C dabei sind, dann ignoriere die Regel – um es mal etwas sehr vereinfacht zu erläutern.
Wo werden solche Regeln erstellt?
In einer Datei namens .htaccess im Serverroot. Dort werden unter anderem die Rewrite-Regeln definiert.
Wie sieht das nun aus?
Ok, lange Rede, gar kein Sinn :-)
Eine Art „universeller“ Rewrite – mit einigen Erklärungen – für lesbare URLs sieht dann folgendermaßen aus.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | ## # URL Rewrite ## <ifmodule mod_rewrite.c> Options +FollowSymLinks RewriteEngine On RewriteBase / ## # Domain formatieren # http://domain.tld ist gewählt (also ohne www.) ## RewriteCond %{HTTP_HOST} ^www\.domain\.tld$ [NC] RewriteRule ^(.*)$ http://domain.tld/$1 [R=301,L] ## # workaround for HTTP authorization # in CGI environment ## RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] ## # always send 404 on missing files in these folders ## RewriteCond %{REQUEST_URI} !^/(media|skin|js)/ ## # Rewrite # Verhindern das existierende Dateien und Links maskiert werden ## RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-l ## # Alles andre auf die index.php leiten. # Kann dann über die PHP-Variable "$_SERVER['REDIRECT_URL']" abgefragt werden. # Beispiel: # http://domain.tld/dies_ist/ein_beispiel # Inhalt der $_SERVER['REDIRECT_URL']: # => dies_ist/ein_beispiel ## RewriteRule . /index.php [L] </ifmodule> |