我目前有一個網站,我試圖在SEO方面進行優化。如何在Apache中將查詢參數重寫爲路徑參數?
我已經得到了網站對URL如工作:
domain.com/?app=about
在我的應用程序,$_GET[app]
設置爲 '約',如預期。
現在,我想讓它像domain.com/about
這樣的URL被當作是domain.com/?app=about
。
我該如何在Apache .htaccess文件中做到這一點?
我目前有一個網站,我試圖在SEO方面進行優化。如何在Apache中將查詢參數重寫爲路徑參數?
我已經得到了網站對URL如工作:
domain.com/?app=about
在我的應用程序,$_GET[app]
設置爲 '約',如預期。
現在,我想讓它像domain.com/about
這樣的URL被當作是domain.com/?app=about
。
我該如何在Apache .htaccess文件中做到這一點?
這些被稱爲RewriteRule
s,而他們是相當簡單:
RewriteEngine on
RewriteRule ^about$ /index.php?app=about
至於使它更加通用的,這個怎麼樣:
RewriteEngine on
RewriteRule ^([A-Za-z]+)$ /index.php?app=$1
這將向任何類似/員工或/聯繫人重定向到index.php的任何請求?app = [staff | contact]
使用此在您的.htaccess
RewriteEngine on
RewriteBase /your-site # only if neccessary
RewriteRule ^([^/])$ index.php?app=$1 [R,L]
編輯
我加入了L位的含義此過程作爲最後一個規則,其本身不改變URL的R標誌..只是在內部重寫。執行R = 301將瀏覽器轉發到重寫的頁面,這對調試很有用。
創建一個通用的.htaccess越來越要求可與以下行來完成的路徑:
RewriteRule ^((.+/)+)$ /index.php?path=$1 [L,B]
這會給您請求的路徑正確轉義,所以如果被請求的路徑是/你好/世界你將在路徑參數中獲得hello%2Fworld。使用PHP函數urldecode()獲取原始格式。
僅當URL以'/'結尾時纔有效。
備註如果你在同一個文件中有其他重寫,你應該把它放在最後,因爲它基本上可以匹配任何東西。
有無論如何使這個更通用,即對所有的應用程序有一個通用的,而不是爲每個應用程序寫一個? – bear 2009-07-11 23:53:42
+1 - 然而這個例子可以工作,但如果你有一些重寫的東西,你最好使用更通用的解決方案。那麼`^ [^ /] $ index.php?app = $ 1`我在這個正則表達式中可能不正確,但總的想法是:P – alex 2009-07-11 23:54:07