2009-03-10 3 views

Antwort

4
RewriteRule ^/cat_ap~nid~(.*)\.htm$ /cat_ap?nid=$1 [R] 

Die [R] am Ende ist optional. Wenn Sie es weglassen, wird Apache Ihre Benutzer nicht umleiten (es wird immer noch die richtige Seite liefern).

Wenn der nid Teil ist auch eine Variable, können Sie dies versuchen:

RewriteRule ^/cat_ap~([^~]+)~(.*)\.htm$ /cat_ap?$1=$2 [R] 

EDIT: Wie Ben sagte Blank in seinem Kommentar, könnte man den Satz gültiger URLs beschränken möchten. Zum Beispiel könnten Sie sicher, dass ein nid besteht zu machen, und dass es numerisches:

RewriteRule ^/cat_ap~nid~([0-9]+)\.htm$ /cat_ap?nid=$1 

oder wenn das nid Teil eine Variable ist, dass es besteht nur aus alphabetischen Zeichen:

RewriteRule ^/cat_ap~([A-Za-z]+)~([0-9]+)\.htm$ /cat_ap?$1=$2 
+0

Sie möchten möglicherweise einschränken, welche Zeichen übereinstimmen (siehe die Kommentare auf Kristinas Antwort). Wenn Ihre IDs beispielsweise immer numerisch sind, verwenden Sie ([0-9] +) anstelle von (. *). –

+0

Ja, ich habe den Kommentar zu Kristinas Antwort abgegeben. =) Ich dachte über die Bearbeitung meiner Antwort nach, aber die Frage enthält keine solche Anforderung. In jedem Fall bearbeite ich meine Antwort aus Gründen der Referenz. –

1

Unter der Annahme, die variablen Teile die "nid" hier sind und die 5964, können Sie tun:

RewriteRule ^/cat_ap~(.+)~(.+).htm$ ^/cat_ap?$1=$2 

den ersten "(. +)" matches "nid" und den zweiten matches "5964".

+0

Ich bin mir nicht sicher, ob das funktioniert, würde es nicht auch passen /cat_ap~nid~foo~5964.htm? –

+0

Ich stimme zu. Die Punkte dort sollten wahrscheinlich stattdessen negierte Zeichenklassen sein (z.B. [^ ~]). –

+0

Sie sind beide völlig richtig, negierte Charakterklassen wären viel besser. – kristina

0

Wenn Sie wollen alles willkürlich:

RewriteRule ^/(\w+)~(\w+)~(\w+)\.htm$ $1?$2=$3 [L] 

Wo \w-[A-Za-z0-9_] gleich ist. Und wenn Sie diese Regel in einer .htaccess-Datei verwenden möchten, entfernen Sie die führende / aus dem Muster.