2009-07-11 56 views
2

我目前有一個網站,我試圖在SEO方面進行優化。如何在Apache中將查詢參數重寫爲路徑參數?

我已經得到了網站對URL如工作:

domain.com/?app=about

在我的應用程序,$_GET[app]設置爲 '約',如預期。

現在,我想讓它像domain.com/about這樣的URL被當作是domain.com/?app=about

我該如何在Apache .htaccess文件中做到這一點?

回答

8

這些被稱爲RewriteRule s,而他們是相當簡單:

RewriteEngine on 
RewriteRule ^about$ /index.php?app=about 

Here's the documentation

至於使它更加通用的,這個怎麼樣:

RewriteEngine on 
RewriteRule ^([A-Za-z]+)$ /index.php?app=$1 

這將向任何類似/員工或/聯繫人重定向到index.php的任何請求?app = [staff | contact]

+0

有無論如何使這個更通用,即對所有的應用程序有一個通用的,而不是爲每個應用程序寫一個? – bear 2009-07-11 23:53:42

+0

+1 - 然而這個例子可以工作,但如果你有一些重寫的​​東西,你最好使用更通用的解決方案。那麼`^ [^ /] $ index.php?app = $ 1`我在這個正則表達式中可能不正確,但總的想法是:P – alex 2009-07-11 23:54:07

2

使用此在您的.htaccess

RewriteEngine on 
RewriteBase /your-site # only if neccessary 

RewriteRule ^([^/])$ index.php?app=$1 [R,L] 

編輯

我加入了L位的含義此過程作爲最後一個規則,其本身不改變URL的R標誌..只是在內部重寫。執行R = 301將瀏覽器轉發到重寫的頁面,這對調試很有用。

0

創建一個通用的.htaccess越來越要求可與以下行來完成的路徑:

RewriteRule ^((.+/)+)$ /index.php?path=$1 [L,B] 

這會給您請求的路徑正確轉義,所以如果被請求的路徑是/你好/世界你將在路徑參數中獲得hello%2Fworld。使用PHP函數urldecode()獲取原始格式。

僅當URL以'/'結尾時纔有效。

備註如果你在同一個文件中有其他重寫,你應該把它放在最後,因爲它基本上可以匹配任何東西。