我有一个URl
http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/
将用户定向到配置文件,即与用户相关的id。
无论如何使用php/。haccess/mysql用相对用户名代替这个id ?
是否有任何形式的解决方案?
我使用重写规则,以便URL中的id被解释为get值:
RewriteRule ^view/([a-f0-9]{40})/$ ./view/index.php?profile_id=$1
我认为你应该考虑使用RewriteMap来解决你的问题。
考虑这个场景:最终用户请求view/joe-soap/
。RewriteMap将根据响应向服务器请求该用户的ID,并实际请求/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/
。
要使其工作,您需要创建一个PHP脚本,该脚本接受来自URL的用户名(由RewriteMap提供),然后返回该用户的ID。RewriteMap将允许您静默请求view/index.php?profile_id=<retrieved_use_id_here>
。
我建议您通读Apache网站提供的文档。以下是一些可以帮助你的网站:
- Rewritemaps在Apache中的意义 mod_rewrite with RewriteMap:外部重写程序
- RewriteMap PRG - By Example For Apache Mod_Rewrite
然而:我建议,考虑到这增加了一个额外的请求,您只需使用PHP获取ID,并且,在同一个请求中,从那里继续(正如其他人所建议的)
您可以尝试使用GET
变量。www.mywebsite.com/view.php ?用户名= john101
这样的…PHP (view.php)
<?php
$username = $_GET["username"];
$query = "SELECT * FROM users_table WHERE username = '".$username."'";
//do whatever you need to do with $username and $query to create user's profile page
?>
我假设多个用户不能有相同的用户名。
您必须修改生成概要文件uri的代码,并向其中添加用户名。所以最终的结果是其中之一。
http://website.com/view/your-username/b2c32b2c782f65be2c299f7b38189a120fd51c89/http://website.com/view/your-username/
这是我能想到的唯一不需要每次有人点击URI时都查询数据库的方法。如果你想让我帮助你,你必须分享生成配置文件uri的代码。
给定一个原始URL,如:
http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/
你可以把它链接到:
http://website.com/view/b2c32b2c78/your-username/
并使用rewriterrule:
RewriteRule ^view/([a-f0-9]{10})/(.*)$ ./view/index.php?profile_id=$1
这允许任何在url的ID部分后面,而不会干扰ID本身。
你可以使用mysql查询来选择合适的用户,即使只有他们的id的前十个字符:
SELECT * FROM users WHERE LEFT(user_id,10)='" . mysql_real_escape_string($_GET['profile_id']) . "' LIMIT 0, 1;
我在我的一个网站上使用了这种方法,该网站有三千到四千多个条目,并且仅使用八个字符(而不是我在这里使用的十个字符)还没有出现任何冲突,并且还没有看到任何冲突。