2009-06-25 109 views
0

我是新來使用mod_rewrite,我試圖在我的網站的基礎水平重寫網頁:簡單的mod_rewrite問題

www.site.com

我想重寫任何以下網址的www。 site.com/main www.site.com/settings www.site.com/username

致:www.site.com/index.php?v=main www.site.com/index.php?v=設置www.site.com/index.php?v=username

我有這個工作,當我有mod_rewrite設置在www.site.com/directory/但不能弄清楚如何使它與www.site.com

RewriteEngine On 
RewriteRule ^/([^/\.]+)/?$ index.php?v=$1 [L] 

回答

0

你有一個額外的「/」那裏。這應該是:

RewriteEngine On 
RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L] 
+0

您不必在字符類聲明中轉義點。 – Gumbo 2009-06-25 08:01:48

1

正確的規則將是...

RewriteRule ^([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA] 

但你可能會打一些問題 - 如果你有真正的目錄,例如 - 這將改寫他們也和防止你使用它們。你有兩個選擇,以避免這個問題,你可以寫很多的規則,就像這樣:

RewriteRule ^Directory/?$ index.php?v=directory [L,NC,QSA] 

或者你可以使用一個「假裝目錄」像這樣...

RewriteRule ^Content/([^/\.]+)/?$ index.php?v=$1 [L,NC,QSA] 

在第二個例子,你的URL將是www.site.com/Content/Directory/

我已經把NC和QSA放在我的屬性上 - 沒有案例和查詢字符串追加。您一定要使用NC,並且在某些實現中QSA很有用。

0

我會解決的路徑是否應/settings/settings/(您目前同時匹配)等(個人而言,我更喜歡/settings)。我認爲,這是一個好主意,使路徑非ambigous越好。如果你要匹配像/settings路徑,你會做這樣的:

RewriteEngine On 
RewriteRule ^(\w+)$ index.php?v=$1 [L] 

也有看QSA標誌,如果你想支持額外的查詢參數(例如:/settings?tab=passwordindex.php?v=settings&tab=password)我提到它,因爲這是一開始困擾我的東西。