2017-09-01 90 views
1

我想通過一個.htaccess文件來改寫我的網址,使它們看起來更乾淨。我有.htaccess用參數重寫網址

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

,它需要最後看起來像個

http://localhost:801/Test/test.php/19/Greenhaven-Elementary 

在我的.htaccess文件我有以下

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

我曾嘗試其他方法,但在使用被新.htaccess文件我一直無法弄清楚。

回答

1

這應該做你以後有什麼:

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

那麼,是什麼上面呢?

首先,它會查詢school=name=爲條件,如果這一條件得到滿足,然後它會搶用(.+)變量的任何版本。

然後它將使用301重定向重寫URL以顯示http://localhost:801/Test/test.php/anything/anything2。使用%1%2將從school=/name=獲取變量,然後我們使用?停止原始查詢字符串出現在新重寫的URL的末尾。

請確保您清除緩存之前測試此。

編輯:

我寫了這對奇異查詢:

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

這包括刪除test.php和我的服務器上工作沒有問題,並返回http://localhost:801/Test/anything

+0

真棒!有效。非常感謝。 –

+0

這將如何轉移到只有一個參數?例如我有一個額外的網址http:// localhost:801/Test/test.php?item = 82但是當我更改.htaccess RewriteEngine RewiteCond%{QUERY_STRING} item =(。+)[NC] RewriteRule ^(。*)$ http:// localhost:801/Test/test.php /%1? [R = 301,NC,L]我得到一個錯誤 –

+0

還有沒有辦法讓test.php不出現在完整的網址? –