将URL中的ID替换为username


Replace ID in URL to username

我有一个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网站提供的文档。以下是一些可以帮助你的网站:

  1. Rewritemaps在Apache中的意义
  2. mod_rewrite with RewriteMap:外部重写程序
  3. 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;

我在我的一个网站上使用了这种方法,该网站有三千到四千多个条目,并且仅使用八个字符(而不是我在这里使用的十个字符)还没有出现任何冲突,并且还没有看到任何冲突。