2012-10-19 36 views
0

我想了解URL重寫的工作原理。我有以下鏈接。URL重寫查詢數據庫?

mysite.com/profile.php?id=23 

我想用用戶名和姓氏重寫上述url。

mysite.com/directory/liam-gallagher 

從我讀過,但是你指定的網址應該是什麼作爲輸出的規則,但我怎麼查詢我的表來獲取每個用戶名?

對不起,如果這很難理解,我迷惑了自己!

+0

您只需搜索名稱而不是ID。你能澄清你不確定的內容嗎? –

+0

如果我搜索了該名稱,如果我有兩個同名的用戶呢? – Liam

+0

@Liam你不應該!你需要爲每個人創建一個獨特的URL段落! –

回答

6

你從錯誤的方向看這個。你不能做那種自動的URL重寫。最好的是創建一個全面的網址重寫:

<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

並創建一個用戶的特定名稱的數據庫將被用作一個網址。

+---------+----------+------+-----------+----------------+ 
| user_id | username | name | surname | url   | 
+---------+----------+------+-----------+----------------+ 
|  23 | liam  | Liam | Gallagher | liam-gallagher | 
+---------+----------+------+-----------+----------------+ 

現在,當有人訪問你的http://mysite.com/directory/liam-gallagher,你可以閱讀的最後一個條目,並找到你的數據庫和user_id使你的腳本做休息。

另一種方法是建議使用Pekka。創建一個像http://mysite.com/directory/23/liam-gallagher這樣的URL並從鏈接中讀取ID。但我個人不喜歡那種類型的網址。在我看來,它們只是快速/懶惰的解決方法。

0

喜歡的東西(只是一個草案,適應自己的需要...):

RewriteEngine On 
RewriteRule ^([a-zA-Z]+)/([a-zA-Z]+)/([0-9]+)/([-0-9a-zA-Z]+)/?$ /$1/$2.php?id=$3 [L] 
0

一種方法我用過的工作原理如下。

制定重寫規則,例如,

mysite.com/directory/(.*) 

重定向到:

mysite.com/profile.php?user=%1 

有1%作爲從規則中捕獲的參數。

然後從配置文件頁面上的查詢參數中抓取用戶,並從數據庫中獲取該用戶的ID。

http://httpd.apache.org/docs/current/mod/mod_rewrite.html