2012-06-15 57 views
2

我已經搜索了一些解決方案,我發現這個link。但它不符合我的問題。我目前正在使用PHP構建一個網站,並且我在URL中使用了查詢字符串。例如,我有這樣一個很多網址:.htaccess使搜索引擎友好的網址

www.example.com?page=something 
and also 
www.example.com?page=something&action=anything 

,我想有隻:

www.example.com/something 
and 
www.example.com/something/anything 

我也是新.htacess劇本,所以我不知道該腳本對我來說意味着我甚至從Google獲得了一些建議。

謝謝。

回答

1

對此有不同類型的體系結構。

最常見的是mod_rewrite。使用一組RewriteRule可以重定向流量,只要你喜歡。

這方面的一個例子是:

RewriteEngine On 
RewriteBase/

RewriteRule ^([^/]+)(?:/([^/]+))? index.php?page=$1&action=$2 [L] 

然而,這些規則管理可以說是變得複雜。在你的情況下,你必須創建一個URL的另一個規則,如:/some/other/page

另一種方法是使用Front-end Controller Pattern。你所有的流量過濾器通過一個地方(如index.php)路由。如果您正在運行Apache 2.2.17或更高版本(現在大多數服務器都是這樣),則可以使用FallbackResource在單行中執行此操作。

例如:

FallbackResource /index.php 
+0

使用它時我看到我的網站沒有風格或效果了。當我查看源代碼時,我點擊了CSS源代碼鏈接,然後我重定向到了同一個地方,我再次在firebug中看到了這一點。 –

+1

是的,'RewriteRule'會提取所有流量。這可能是問題。我建議使用'FallbackResource'來代替。 –

1

這是一個相當基本的重寫與mod_rewrite的。這樣的事情應該做的工作:

RewriteEngine On 
RewriteRule ^([^/]+)(?:/([^/]+))? index.php?page=$1&action=$2 [L] 

表達([^/])意味着一切都匹配到下一個/(?:/([^/]+))?包含相同的模式,但被非捕獲組(?:/)?包圍,這使得整個第二組是可選的。