2009-05-25 3 views
1

Ugh .. mod_rewrite macht mich dumm fühlen. Ich habe mein Gehirn noch nicht eingepackt. :/Hilfe mit mod_rewrite Regel für dynamische URL

Ich habe diese url:

http://example.com/a/name/

... dass ich hier verweisen soll:

http://example.com/a/index.php?id=name

... wo name ist, was weitergegeben wird immer index.php als das id Argument.

Alles, was ich habe versucht, führt entweder eine 404 oder ein 500 .. :(

Antwort

1

Um Sie aus zu starten:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !index.php 
RewriteRule ^/?a/([^/]+)/?$ /a/index.php?id=$1 [QSA,L] 

Wenn ein Rewrite-Tutorial für Sie nicht funktioniert, try another.

Edit: ausgeschlossen index.php per Gumbo Vorschlag

+0

Ergebnisse in 500 Fehler mit diesem: Antrag die Grenze von 10 internen Umleitungen wegen wahrscheinlichen Konfigurationsfehler überschritten. – Ian

+0

Ah, das ist nur, weil es versucht, die neu geschriebene URL neu zu schreiben. Wenn ich von, sagen wir^/? Aa/dann es funktioniert gut. Vielen Dank! – Ian

+1

@Ian Sie müssen die Datei ausschließen, in die Sie die Anfrage umschreiben. – Gumbo

1

Vielleicht etwas entlang der Linien von

 
RewriteEngine on 
RewriteBase /a/ 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)/?$ index.php?id=$1 [L,QSA] 

würde den Trick tun.

1

Ich schlage vor, Sie einen Blick auf dieser URL nehmen:

http://www.dracos.co.uk/code/apache-rewrite-problem/

Die vorgestellten Lösungen funktionieren werden, aber es gibt einige Einschränkungen in der URL erklärt, vor allem in Bezug auf? und # in den URLs selbst.

2

Wenn der abschließende Schrägstrich optional sein soll, müssen Sie die Datei ausschließen, in die Sie die Anforderung umschreiben. Ansonsten haben Sie eine schöne unendliche Rekursion.

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/a/index\.php$ 
RewriteRule ^/a/([^/]+)/?$ /a/index.php?id=$1 [L] 

Hier wird jede Anforderung, mit /a/… beginnt aber nicht /a/index.php wird neu geschrieben /a/index.php.

Aber wenn der Schrägstrich zwingend vorgeschrieben ist, besteht keine Notwendigkeit, die Zieldatei auszuschließen:

RewriteEngine on 
RewriteRule ^/a/([^/]+)/$ /a/index.php?id=$1 [L]