我有一个URl
http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/
将用户引导至个人资料,即与用户相关的ID。
无论如何使用php / .htacess / mysql将此id替换为相对用户名吗?
有任何形式的解决方案吗?
我使用重写规则,以便将URL中的id解释为get值:
RewriteRule ^view/([a-f0-9]{40})/$ ./view/index.php?profile_id=$1
答案 0 :(得分:2)
我认为您应该考虑使用 RewriteMap 来解决您的问题。
考虑这种情况:最终用户请求view/joe-soap/
。 RewriteMap会向服务器询问此用户的ID,并根据响应实际请求/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/
。
为此,您需要创建一个PHP脚本,该脚本接受来自URL的用户名(由RewriteMap提供),然后返回该用户的ID。然后,RewriteMap将允许您静默请求view/index.php?profile_id=<retrieved_use_id_here>
。
我建议您在Apache的网站上提供read through the documentation。以下是一些可以帮助您的网站:
然而:我建议,考虑到这会增加额外的请求,您只需使用PHP获取ID,并在同一请求中继续从那里开始(正如其他人建议的那样)
答案 1 :(得分:0)
您可以尝试使用GET
个变量。 www.mywebsite.com/view.php?username=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
?>
我假设多个用户不能拥有相同的用户名。
希望这有帮助。
答案 2 :(得分:0)
您必须修改生成配置文件URI的任何代码并向其添加用户名。所以最终的结果就是其中之一。
http://website.com/view/your-username/b2c32b2c782f65be2c299f7b38189a120fd51c89/ http://website.com/view/your-username/
这是我能想到的唯一方法,每次有人点击URI时都不需要你查询数据库。如果您希望我帮助您,则必须共享生成配置文件URI的代码。
答案 3 :(得分:0)
给出原始网址:
http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/
您可以改为链接到以下内容:
http://website.com/view/b2c32b2c78/your-username/
并使用RewriteRule,如:
RewriteRule ^view/([a-f0-9]{10})/(.*)$ ./view/index.php?profile_id=$1
这允许任何位于网址的ID部分后面,而不会干扰ID本身。
然后你可以使用mysql查询来选择合适的用户,即使只有他们id的前十个字符:
SELECT * FROM users WHERE LEFT(user_id,10)='" . mysql_real_escape_string($_GET['profile_id']) . "' LIMIT 0, 1;
我在我的一个网站上使用此方法,其中包含超过三到四千的条目,并且还没有使用八个字符进行任何冲突,而不是我在这里使用的十个,并且还没有看到任何类型的碰撞。