你好我想創建一個用戶url的格式,例如用戶ninja123,他會得到example.com/ninja123的配置文件鏈接,即時通訊使用Apache上的php mysql。這是正常的鏈接!友好的網址爲用戶配置文件?
viewprofile.php?userid=2
我怎麼可以appraoch這個問題呢?和IM不好.htaccesss新手:))感謝
你好我想創建一個用戶url的格式,例如用戶ninja123,他會得到example.com/ninja123的配置文件鏈接,即時通訊使用Apache上的php mysql。這是正常的鏈接!友好的網址爲用戶配置文件?
viewprofile.php?userid=2
我怎麼可以appraoch這個問題呢?和IM不好.htaccesss新手:))感謝
而不是做$_GET['userid']
和尋找ID的......通過查找名稱,以便它就像打開它:viewprofile.php?userid=Ninja123
試試這個現代重寫發生器:http://www.generateit.net/mod-rewrite/
只能爲此使用.htaccess RewriteRule。如果論壇公開數據庫內部標識,則主要是重寫部分SQL查詢。基本上你首先需要接受$_GET["username"]
而不是"userid"
,然後重寫查找。作爲例子:
db_query("SELECT * FROM users WHERE id=?", (int)$_GET["userid"]);
到
db_query("SELECT * FROM users WHERE username=?", encode($_GET["username"]));
取決於應用,實際的SQL表結構和DB接口(您的論壇可能使用mysql_query
和mysql_real_escape_string
,而不是encode
)。
之後,您可以部署一個簡單的RewriteCond !-f {%..}
和RewriteRule (.+) /viewprofile?username=$1
以獲取短網址。
創建一個.htaccess文件:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
</IfModule>
如果站點訪問者請求http://example.com/Ninja123
,該文件夾不會被發現,因此將運行index.php
與/Ninja123
在index.php文件填寫$_GET['url']
,從$_GET['url']
獲取路徑組件:
$username = trim(parse_url($_GET['url'], PHP_URL_PATH), '/');
Now $ username will co ntain Ninja123
。您可以使用它來執行數據庫搜索以檢索用戶標識。如果你想要這個包含子目錄的請求(example.com/Ninja123/photos/party),你需要在執行查詢之前去掉這些子目錄。
謝謝!!!非常好的答案 – getaway 2010-08-30 16:09:36