用户个人资料的友好网址?

时间:2010-08-30 15:43:16

标签: php apache url friendly-url

你好我想为用户url创建一个格式,例如对于用户ninja123,他会得到一个example.com/ninja123的个人资料链接,我在apache上使用php mysql。这是正常的链接!

viewprofile.php?userid=2

我怎么能评价这个问题?而我是一个坏.htaccesss新手:))谢谢

3 个答案:

答案 0 :(得分: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并使用$_GET['url']填充/Ninja123

在index.php中,从$_GET['url']

中获取路径组件
$username = trim(parse_url($_GET['url'], PHP_URL_PATH), '/');

现在$ username将包含Ninja123。您可以使用它来执行数据库搜索以检索用户ID。如果您希望这可以处理包含子目录的请求(example.com/Ninja123/photos/party),您将需要在执行查询之前删除这些子目录。

答案 1 :(得分:0)

而不是执行$_GET['userid']并寻找ID ...通过查找名称来切换它,如下所示:viewprofile.php?userid=Ninja123

尝试使用此Mod Rewrite生成器:http://www.generateit.net/mod-rewrite/

答案 2 :(得分:0)

您不能仅为此使用.htaccess RewriteRule。如果论坛公开数据库内部ID,则主要是重写部分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表结构和数据库接口(您的论坛可能使用mysql_querymysql_real_escape_string而不是encode。)

之后,您可以部署简单的RewriteCond !-f {%..}RewriteRule (.+) /viewprofile?username=$1来获取简短的网址。