将URL中的ID替换为用户名

时间:2013-05-15 21:31:34

标签: php mysql .htaccess url url-rewriting

我有一个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

4 个答案:

答案 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。以下是一些可以帮助您的网站:

  1. Making sense of Rewritemaps in Apache
  2. mod_rewrite with RewriteMap: External Rewriting Program
  3. RewriteMap PRG By Example Using PHP For Apache Mod_Rewrite
  4. 然而:我建议,考虑到这会增加额外的请求,您只需使用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;

我在我的一个网站上使用此方法,其中包含超过三到四千的条目,并且还没有使用八个字符进行任何冲突,而不是我在这里使用的十个,并且还没有看到任何类型的碰撞。