2009-05-18 3 views
0

Gibt es eine Möglichkeit, eine Umschreibungsregel in Htaccess zu setzen, die Abfragezeichenfolgen in segmentierte URIs konvertiert? Für z.Wie schreibe ich eine .htaccess Rewrite-Regel, um Abfragezeichenfolgen in segmentierte URIs zu konvertieren?

http://domain.com/controller/method/?a=1&b=2&c=3 

sollte neu geschrieben als

http://domain.com/controller/method/a/1/b/2/c/3 

Alle dort erhalten, ist die zu tun ist, entfernen? und ersetze die & s und die = s mit a /, aber ich bin nicht ganz sicher, wie all das in .htaccess abbildet ...

Nicht, dass es wichtig wäre, aber ich benutze PHP und CodeIgniter auf Apache.

Antwort

1

Warum setzen Sie diese Logik nicht in Ihren CodeIgniter-Controller, anstatt es in .htaccess zu tun?

Überprüfen Sie CodeIgniter's User Guide für die Verarbeitung von Abfragezeichenfolgen und URLs.

+0

ich Probleme, bin mit CodeIgniter die Abfrage-Strings aus der URL zu empfangen. Es funktioniert gut auf dem lokalen Server, aber auf dem Live-Server, der Moment, wenn ich alles nach einem '?' Am Ende setzen, lässt CI einfach einen 404 killen. Deshalb möchte ich den Abfrage-String in einen segmentierten URI, also CI, umschreiben wirft seine Hände nicht hoch. – aalaap

+0

@aalaap Sie können Abfragezeichenfolgen in CI aktivieren, indem Sie $ config ['enable_query_strings'] setzen = TRUE; Überprüfen Sie diese: http://codeigniter.com/user_guide/general/urls.html – duckyflip

0

Wenn Sie es in der .htaccess tun möchten, müssen Sie mod_rewrite haben.

Die Regel ist nicht zu schwierig. Ich gebe Ihnen ein minimales Beispiel, und Sie müssen die Regex anpassen, um Ihren Bedarf zu beheben.

RewiteRule ^/([a-z]+)/([a-z]+)$ /method/?$1=$2 
+0

Ich muss das genaue Gegenteil von dem tun, was Sie mit dieser Regel tun! – aalaap

0

Dies ist, was Sie tun können:

RewriteCond %{THE_REQUEST} ^GET\ /[^?]*\? 
RewriteCond %{QUERY_STRING} ^([^&=]+)=?([^&]*)&([^&=]+)=?([^&]*)&?(.*) 
RewriteRule^%{REQUEST_URI}/%1/%2/%3/%4?%5 [L] 
RewriteCond %{THE_REQUEST} ^GET\ /[^?]*\? 
RewriteCond %{QUERY_STRING} ^([^&=]+)=?([^&]*)&?(.*) 
RewriteRule^%{REQUEST_URI}?/%1/%2?%3 [L] 
+0

Wäre es nicht möglich, die URLs ohne Umleitung neu zu schreiben? Ich meine, dafür ist "mod_rewrite" da, richtig! Was würde passieren, wenn ich die "R = 301" von den Regeln, die Sie niedergelegt haben, fallen lassen würde? – aalaap

+0

Natürlich gibt es. Lass die R-Flagge einfach weg. – Gumbo

Verwandte Themen