Sarius87 schrieb:
RewriteRule ^\.htaccess$ - [F]
Diese Zeile solltest du getrost weglassen können, denn ein Apache2 sollte schon von Haus aus keine .ht*-Dateien ausliefern. Selbiges ist unter Ubuntu und Debian in der /etc/apache2/apache2.conf
festgelegt (such mal nach "FilesMatch").
1 RewriteCond %{REQUEST_FILENAME} !-f
2 RewriteCond %{REQUEST_FILENAME} !-d
3 RewriteRule ^([^/^\.]+)$ /index.php?id=$1 [QSA,L]
4 RewriteCond %{REQUEST_FILENAME} !-f
5 RewriteCond %{REQUEST_FILENAME} !-d
6 RewriteRule ^(.+)/([^/]+)$ /$1?action=$2 [QSA,L]
Ich sehe, was du willst, allerdings würde ich das anders machen. Erstmal: Bis zur Zeile 4 kommt der Apache2 gar nicht, da immer vorher schon Zeilen 1-3 matchen. Von daher ist es schwierig sowas direkt mit Rewrites umzusetzen, vor allem wenn man die Anzahl an Parametern nicht kennt. Ich würde daher einfacher vorgehen, und einfach alles auf die index.php
umleiten...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* /index.php [QSA,L]
... um dann erst im PHP die URI auszuwerten:
| <?php
// Diese Zeile erzeugt ein Array, welches alle "Pfadbestandteile" enthält.
// Pfadbestandteile werden aber nur bis zum Fragezeichen erkannt, da danach
// der Query-String anfängt.
$route = preg_split( ",/,", substr( $_SERVER["REQUEST_URI"], 0, strpos( $_SERVER["REQUEST_URI"], "?" ) ), -1, PREG_SPLIT_NO_EMPTY );
echo "<pre>";
print_r( $route );
print_r( $_REQUEST );
|
Dadurch kannst du URLs in folgender Form verwenden:
$ curl -s example.com/foo/bar/baz?a=b&c=d
Array
(
[0] => foo
[1] => bar
[2] => baz
)
Array
(
[a] => b
[c] => d
)
Welchen Zweck die einzelnen Teile des $route
-Arrays haben, kannst du dann direkt im PHP festlegen.