2012-10-21 19 views
9

Ich habe nach dieser Frage gesucht, aber ich stoße nur auf wirklich spezifische Antworten, die schwierig auf meine spezifischen Bedürfnisse zugeschnitten zu sein scheinen..htaccess Abfragezeichenfolge als Pfad umschreiben

Lassen Sie uns die URL sagen, dass ich diese zu umschreiben bin versucht, ist:

http://www.example.org/test.php?whatever=something 

ich möchte es neu zu schreiben, so dass es wie dies erscheint:

http://www.example.org/test/something 

Wie kann ich das tun?

+2

Hier sind einige Beispiele: https://wiki.apache.org/httpd/RewriteQueryString –

Antwort

19

Um eine Anfrage wie /test/something intern zu routen umschreiben, so dass der Inhalt bei /test.php?whatever=something serviert wird, würden Sie diese Regeln in der .htaccess-Datei in Ihrem Dokument root verwenden:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^/?test/(.*?)/?$ /test.php?whatever=$1 [L] 

Und um zu umleiten die Query-String-URL zum schöneren ein:

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /test\.php\?whatever=([^\&\ ]+) 
RewriteRule ^/?test\.php$ /test/%1? [L,R=301] 
+0

Absolut perfekt, danke! – UserIsCorrupt

+0

Wenn Sie obigen Code verwenden, wenn jemand in der ablaufenden Abfragezeichenfolge ein Problem hat, dann müssen Sie am Ende der letzten Regel nur ein abschließendes Fragezeichen hinzufügen. Hier ist ein aktualisierter Code 'RewriteCond% {THE_REQUEST}^[AZ] {3, 9} \ /test \ .php \ was auch immer = ([^ \ & \] +) RewriteRule^/? Test \ .php $/test /% 1? [L, R = 301] ' –

+0

Ich habe die gleichen Regeln, aber es funktioniert nicht meine URL ist http://example.com/directory1/directory2/login.php?id=8 und ich möchte es wie http machen: //example.com/directory1/directory2/login/8 Bitte sagen Sie mir, wie ich es beheben kann –