2011-10-30 161 views
0

我在構建重寫規則時遇到了一些問題。我想重寫,並最終重定向的URL有一個搜索查詢它看起來像這樣:htaccess重寫/重定向

http://www.mysite.com/pages.php?category=fruit

我想它重定向到:

http://www.mysite.com/pages.php/fruit

原來的地址確實不再存在。我試圖構建一個重寫但這不太工作,我怎麼想它的工作

RewriteEngine on 
RewriteCond %{QUERY_STRING} =category=fruit` 
RewriteRule ^pages\.php$ pages.php/fruit/ [L,R=301] 

http://www.mysite.com/home/linux123/m/mysite.com/user/htdocs/pages.php/fruit/ 

任何意見上固定重寫規則的建設將是巨大的。提前致謝。

+0

你甚至不需要htaccess的。只需使用$ _SERVER [「PATH_INFO」]而不是$ _GET ['category']。只要注意path_info以'/'開頭,所以你應該刪除那個substr($ _ SERVER [「PATH_INFO」],1) – Gerben

+0

謝謝Gerben。我意識到,我可以從網頁本身獲取數據和/或重定向後,我給了它幾個小時的思考。 – kaliok

回答

2

URL重寫的工作方式是,它採用不存在的URL並將其重寫爲指向存在的URL。不存在的URL更多是介紹性的東西,而不是功能性的東西。反過來,你的網頁上的鏈接應該是http://www.mysite.com/pages.php/fruit,當用戶點擊它們時,它們應該在內部被轉發到像這樣的http://www.mysite.com/pages.php?category=fruit。重寫規則必須進行相應的書面這將是

^pages\.php/([A-Za-z])*$ pages.php?category=$1 [NC,L] 

如果類別是嚴格按字母順序排列,否則字母數字

^pages\.php/([A-Za-z0-9])*$ pages.php?category=$1 [NC,L] 

你甚至可以測試使用這個在線驗證您的正則表達式重寫規則;

Regex Validator

希望這有助於..

+0

感謝您的建議。但是我想要做的是使用我的新系統。新系統不使用查詢字符串。我想使用非查詢網址。我也希望它只針對有限數量的網址 - 即一個用於水果,一個用於蔬菜,另一個用於雜物......主要原因是帶查詢字符串的舊網址仍然停留在谷歌中,雖然我提供了一個新的站點地圖,我只想抓住任何已經使用舊的查詢字符串url進行索引並重定向的站點地圖。 – kaliok

+0

我想我真的需要知道的是如何使它改寫重寫規則不包含linux位:home/linux123/m/mysite.com/user/htdocs – kaliok

+0

RewriteRule自動刪除unix路徑。您只能匹配rewritebase之後的部分。從谷歌中刪除舊網址的最簡單方法是將pages.php重命名爲例如pages2.php,並相應地更改htaccess。如果你想讓舊的url重定向到新的url,你可以創建一個新的pages.php文件,它執行類似header(「Location:http:// {$ _SERVER ['HTTP_HOST']} /pages2.php/ { $ _GET ['category'} /「)或者只是使用htaccess。我也建議從url中刪除.php部分。所以^ pages /([A-Za-z])* $ pages2.php?category = $ 1 [NC,L] – Gerben