你好我想为用户url创建一个格式,例如对于用户ninja123,他会得到一个example.com/ninja123的个人资料链接,我在apache上使用php mysql。这是正常的链接!
viewprofile.php?userid=2
我怎么能评价这个问题?而我是一个坏.htaccesss新手:))谢谢
答案 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_query
和mysql_real_escape_string
而不是encode
。)
之后,您可以部署简单的RewriteCond !-f {%..}
和RewriteRule (.+) /viewprofile?username=$1
来获取简短的网址。