2017-09-01 1 views
1

Ich versuche meine URLs durch eine .htaccess-Datei neu zu schreiben, um sie sauberer zu machen. Ich habe.htaccess URLs mit Parametern neu schreiben

http://localhost:801/Test/test.php?school=19&name=Greenhaven-Elementary 

und es muss wie

suchte, um am Ende
http://localhost:801/Test/test.php/19/Greenhaven-Elementary 

In meiner .htaccess-Datei Ich habe folgende

RewriteEngine On 
RewriteRule ^([a-zA-Z0-9-/+]+)([0-9]+)$ test.php?school=/$1&name=$2/ [L] 

Ich habe andere Weise versucht, aber da neu bei Verwendung von .htaccess-Dateien konnte ich nicht herausfinden.

Antwort

1

sollte dies tun, was nach dem Sie:

RewriteEngine On 
RewriteCond %{QUERY_STRING} school=(.+)&name=(.+) [NC] 
RewriteRule ^(.*)$ http://localhost:801/Test/test.php/%1/%2? [R=301,NC,L] 

Also, was die oben zu tun haben?

Erstens dauert es die Abfrage school= und name= als Bedingung, wenn diese Bedingung erfüllt ist, dann wird es eine Version der Variablen greift mit (.+).

Es wird dann die URL neu schreiben 301 Umleitung verwenden, um http://localhost:801/Test/test.php/anything/anything2 anzuzeigen. Die Verwendung von %1 und %2 besteht darin, die Variablen von school=/name= zu übernehmen und dann ? zu verwenden, um zu verhindern, dass die ursprüngliche Abfragezeichenfolge am Ende der neu umgeschriebenen URL angezeigt wird.

Stellen Sie sicher, dass Sie den Cache leeren vor dies testen.

EDIT:

Ich schrieb dies für die singuläre query:

RewriteEngine On 
RewriteCond %{QUERY_STRING} item=(.+) [NC] 
RewriteRule ^(.*)$ http://localhost:801/Test/%1? [R=301,NC,L] 

Dazu gehören test.php zu entfernen und auf meinem Server funktioniert ohne Probleme und gibt http://localhost:801/Test/anything

+0

Awesome! Es funktionierte. Danke vielmals. –

+0

Wie würde das auf nur einen Parameter übertragen? Beispiel: Ich habe eine zusätzliche URL http: // localhost: 801/Test/test.php? item = 82 aber wenn ich die .htaccess ändern RewriteEngine On RewiteCond% {QUERY_STRING} Element = (. +) [NC] RewriteRule^(. *) $ http: // localhost: 801/Test/test.php /% 1? [R = 301, NC, L] Ich bekomme einen Fehler –

+0

Gibt es auch eine Möglichkeit, die test.php nicht in der fertigen URL angezeigt zu bekommen? –