2011-01-08 30 views
0

我正在尋找mod_rewrite來屏蔽我的網站上的用戶配置文件。但是,他們的檔案由/profile.php?id=1的格式決定。 'user'和'id'都在mySQL表'users'中。有沒有辦法重新路由URL來閱讀/user?對不起,如果這是不好解釋!.htaccess將id通過mySQL數據庫轉換爲用戶

回答

2
RewriteEngine on 
RewriteRule ^profile/([^/\.]+)/?$ /profile.php?user=$1 [L] 

這將導致所有/ profile/username被重定向到profile.php?user = username。然後您可以檢查您的PHP:

if (isset($_GET['user'])) { 
    // Check if the username exists. 
    // SELECT ... FROM users WHERE username = .. 
} 
+0

感謝您的答覆,這幾乎是我在找什麼。我該如何做到這一點,以便如果該網頁是www.domain.com/profile?id=1將其重新路由到www.domain.com/user,該用戶的id = 1? – Sebastian 2011-01-08 17:46:12

0

.htaccess將無法使用數據庫中的信息來執行您的要求。即使它可以你不應該這樣做:)。

但你可以做的是改變profile.php,以便能夠通過名稱讀取用戶。假設要讓profile.php能夠處理一個新的參數name =,並且在其中添加邏輯以通過id或通過名稱查看數據庫。如果你有這個,那麼實際上路由/到/profile.php?name=是微不足道的。

您還必須更改網站生成以輸出適當的網址。

另請參閱Cristian的答案以獲取更多技術細節。最後它是一樣的想法。

0

你不會改變這在htaccess中,或任何類型的配置/重寫規則。如果我明白你想要什麼,這將在你的應用程序PHP中完成。

/profile.php?id=1 profile.php是(重寫規則放在一邊)源PHP文件,而id是GET參數。它在執行時就像是profile.php的參數。它們的格式爲source.php?get1=val1?get2=val2....,您可以通過陣列訪問它們$ _GET

如果您不希望用戶看到該ID,則可以執行以下兩項操作之一。

  1. 按照您的建議,將其替換爲用戶。網址是「profile.php?用戶名= XXX」

然後在你的代碼,你將可能需要執行一個簡單的數據庫查詢來獲取用戶名ID。在profile.php的代碼頂部應該大概有5行,其餘的可以保持不變注意,這需要唯一的用戶名,以防以前使用過,以及某些特殊字符可能會在URL中獲取參數時出現問題?對於大多數用戶名,唯一性是必需的,特殊字符是不允許的,所以希望這不是問題。

  1. 保持身份證,但使其成爲一個POST的peremeters。 URL爲'profile.php' POST參數與get類似,但對用戶不可見,因爲它們不是URL字符串的一部分。只需在profile.php中將$ _GET切換爲$ _POST即可。該代碼仍然會通過ID標識用戶,但他們將無法看到他們的ID。

在這兩種情況下,你需要改變任何進入links.actions導致我們正在改變descrubed URL。

編輯 - Christian's有一個很好的建議,它與上面的#1相似,但會允許更好看的網址,如profile/XXX而不是'profile.php?username = XXX'。在profile.php內的代碼將相同,他的更改在profile.php是相同的

相關問題