2009-08-02 140 views

回答

5

爲了避免遞歸,你應該檢查request line而不是作爲%{QUERY_STRING}查詢字符串可能已經被其他的規則改變:

RewriteCond %{THE_REQUEST} ^GET\ /\?(([^&\s]*&)*)tag=([^&\s]+)&?([^\s]*) 
RewriteRule ^(.*)$ /tag/%3?%1%4 [L,R=301] 

然後你可以重寫請求返回內部沒有衝突:

RewriteRule ^tag/(.*) index.php?tag=$1 [L] 
+3

Andrew Moore和Gumbo 謝謝,但非常感謝。 我試圖解決超過一個星期沒有成功。 Gumbo提出的解決方案解決了這個問題。 當遇到願意幫助別人的人時,我確信我們可以擁有一個更美好的世界。 對不起,但我的英語知識非常有限。 我只想感謝。 Vera – Vera 2009-08-02 16:50:59

6

嘗試以下方法:

RewriteCond %{QUERY_STRING} ^tag=(.+)$ 
RewriteRule ^(.*)$ http://www.example.com/tag/%1 [L] 

通常,重寫用於實現相反的效果。你確定你不想做以下事情嗎?

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

我試圖從這樣的URL轉換:

http://java.scandilabs.com/faq?key=Contents_of__gitigno 

要這樣的網址:

http://scandilabs.com/technology/knowledge/Contents_of__gitigno 

上面我曾與另外一個問號在最後放棄原來的查詢字符串安德魯的回答是:

RewriteCond %{HTTP_HOST} ^java 
RewriteCond %{QUERY_STRING} ^key=(.+)$  
RewriteRule ^(.*)$ http://scandilabs.com/technology/knowledge/%1? [R=301,L] 

注意,如果你在apache 2.4或更高版本上,你可以使用QSD標誌而不是問號。

相關問題