2011-12-22 29 views
0

我在開發以下列方式處理用戶帳戶一個網站的過程是用戶帳戶:mod_rewrite的在URL最好的方法

  • www.mysite.com/username
  • www.mysite。 COM /用戶名/用戶動作

我明白與mod_rewrite的基礎知識,我可以這樣做:

RewriteRule ^(/*)/?$ /index.php?username=$1 [QSA,L] 

但是,這是如何與我的網站中的其他目錄工作?我有其他網址,如:

  • www.mysite.com/about
  • www.mysite.com/contact

難道我總是假設在URL中的第一個 「目錄」 是一個用戶名,然後嘗試驗證?然後,如果它沒有驗證,不要做任何事情......似乎在數據庫上有很多不必要的點擊。另外,如果是這種情況,那麼我該如何處理導航到其他頁面,因爲它真的是/index.php?username=about在這一點上......我想要它去/關於......這是一個循環!

+0

我會以其他方式做。那就是第一段是目錄,如果不是則檢查數據庫,如果失敗也顯示錯誤頁面或重定向到其他頁面。 雖然這仍然不是一個好的解決方案,因爲這有些限制了進一步發展,如果有人已經採取了未來部分的用戶名.. – enoyhs 2011-12-22 17:21:16

+0

我明白你的意思,但mod_rewrite可以檢測一個目錄是否存在?我認爲mod_rewrite發生在PHP之前,所以我不知道如何做到這一點。 – Stanley 2011-12-22 17:29:12

回答

2

使用RewriteCond像這樣:

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(/*)/?$ /index.php?username=$1 [QSA,L] 

RewriteCond首先檢查該文件確實存在,如果有不適用的重寫規則。否則會重寫您的網址。

當然,根據您的情況,還有其他方法可能更合適。但通常,不是採取檢查數據庫中是否存在用戶的方法,而是採取相反的措施:檢查它是否是有效的第一級目錄/類別,並且如果不是僅假設它是用戶。

另一種選擇是將子目錄/ site/contact/site/about中的所有靜態內容。這大大簡化了在您經常更改網站上的內容部分數量的情況下維護的問題。例如改寫條件:

RewriteCond %{REQUEST_URI} !(site/) [NC] 

然後你就可以擁有一個適用於site/中要映射到一個CMS或什麼情況下其它重寫規則。最後,我建議考慮使用Web框架(Symofony,yii,CodeIgniter),因爲一旦你掌握了它,它們使你能夠更快地開發,並且在某些情況下具有內置的靈活的重寫/路由規則。

0

首先處理物理地址(例如/resources/logo.png),然後處理靜態內容(/about/ ...),然後處理用戶等動態內容。

我推薦使用/user/[username]/action,但更傳統的模式。

0

我會做它如何做到這一點。 /questions/{questionID}/{questionTitle}/users/{userID}/{userName} ...等。使用uri中的第一條路徑給你一個關於接下來會發生什麼的想法。