2010-07-23 5 views
8

Was ist falsch an dieser Rewrite-Regel?RewriteRule, das die GET-Parameter beibehält

RewriteRule ^api/(.+)$ api/index.php?url=$1 [L] 

ich einfach mal "index.php? Url =" nach api/und vor dem Rest der GET-Parameter hinzugefügt werden.

api/image/upload&arg1=1&text=lorem+ipsum 

zu

api/index.php?url=image/upload&arg1=1&text=lorem+ipsum 

Was stimmt nicht mit (. +) Alles nach api bekommen /?

+0

^api/([a-zA-Z0-9/_ \ & \ = \%] +) $ funktioniert, funktioniert aber nicht mit anderen sprachspezifischen Zeichen als åäöøæé und so weiter ... Deshalb würde ich es tun wie^api /(.+)$, um stattdessen zu arbeiten. . sollte jedes Zeichen außer Zeilenumbruch oder Ende der Zeichenfolge bedeuten, damit ich es nicht verstehe, warum es nicht funktioniert. – Tirithen

+0

möglich duplizieren von [keep url parameter mit htaccess rewrite] (http://stackoverflow.com/questions/4071155/keep-url-parameters-with-htaccess-rewrite) –

Antwort

19

Die Regex auf dem RewriteRule wird nur ausgeführt, gegen den Pfad Teil der URL, nicht die Abfrageparameter. Glücklicherweise gibt es die [QSA] flag, um vorhandene Abfrageparameter zu erhalten.

+0

Wunderbar! Das hat meine Probleme gelöst! Ich habe auch eine JS Funktion gefunden, um alle non a-zA-Z0-9_ zu kodieren. Zeichen http://cass-hacks.com/articles/code/js_url_encode_decode/ – Tirithen

+0

Vielen Dank! –

+0

QSA hat mich gerettet! Danke mein Herr! –

0

Machst du etwas, um die unendliche Rekursion zu stoppen?

RewriteRule ^api/(.+)$ api/index.php?url=$1 [R=301,L] 

oder einige gleichwertige

+0

Ich hatte [L] vor, aber es macht keine Unterschied. Mein Problem ist, dass apache2 meldet, dass der einzige get-Parameter [url] => index.php ist, alle anderen Parameter sind weg und der URL-Parameter sollte 'image/upload' sein. Wenn ich die Regel^api/([a-zA-Z0-9/_] +) $ verwende, ist der URL-Parameter 'image/upload', aber ich verliere stattdessen alle anderen GET-Parameter. – Tirithen

+0

Ich versuche auch nicht, eine Umleitung zu tun, nur den Text zwischen api/und vor dem ersten & um die Zeichenfolge mit dem Präfix "index.php? Url =" erhalten und den Rest der GET-Parameter erhalten – Tirithen

+0

Wie funktioniert ' R = 301' Arbeit hier? Es ist nicht in der Dokumentation unter http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html –

0

Ich glaube, Sie Ihren Domain-Namen vor dem regulären Ausdruck Sachen schreiben müssen. Wie folgt aus:

RewriteRule ^(.+).com/api/(.*)$ "$1.com/api/index.php?url=$2" [R=301,L]