【问题标题】:Replace ID in URL to username将 URL 中的 ID 替换为用户名
【发布时间】:2013-05-10 15:07:38
【问题描述】:

我有一个网址

http://website.com/view/b2c32b2c782f65be2c299f7b38189a120fd51c89/

将用户引导至个人资料,即与用户相关的 id。

有没有使用 php/.htacess/mysql 将这个 id 替换为相对用户名?

有什么解决办法吗?

我使用重写规则,以便将 URL 中的 id 解释为获取值:

RewriteRule ^view/([a-f0-9]{40})/$ ./view/index.php?profile_id=$1

【问题讨论】:

  • 是的,但我们需要了解更多。什么脚本生成这个 URI?给我们看一些代码伙计
  • 当然。只需让处理请求的任何脚本查找用户名并根据该用户名重定向到新的 url。
  • 我想你误会了,我只需要将 id 替换为用户名,我将用户名存储在与 id 相同的表中,我使用 ID 来检索有关用户的数据,即生成他们的个人资料。
  • 我们使用 ID 是因为它们是唯一的,但名称不是,那么您将如何处理 2 个具有相同名称的不同 ID?
  • 我明白你的意思,但 facebook 实现了这一点,例如facebook.com/'UsernameHere',我想实现相同的特征,因为它为 URL 提供了更有意义的身份,如果有解决方案,我将实施验证以获取唯一的用户名

标签: php mysql .htaccess url url-rewriting


【解决方案1】:

您可以尝试使用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
?>

我假设多个用户不能拥有相同的用户名。

希望这会有所帮助。

【讨论】:

  • 我希望能够只用用户名替换 id
  • 抱歉,除了将GET 变量添加到 URL 之外,我不知道如何更改 URL。祝你好运。
  • 你的解决方案就是我现在正在做的,获取id,查询数据库获取用户信息。
  • 我不知道您是否可以更改 URL 中的变量,但您可以尝试删除 GET 变量以使 URL 干净。在这里,这可能会有所帮助。 stackoverflow.com/questions/3343057/…
  • 怎么样 - 让用户通过“选择用户名”过程,他们基本上只是用一组独特的字符替换 id,即他们独特的用户名?
【解决方案2】:

您必须修改生成配置文件 URI 的任何代码并将用户名添加到其中。所以最终结果是其中之一。

http://website.com/view/your-username/b2c32b2c782f65be2c299f7b38189a120fd51c89/ http://website.com/view/your-username/

这是我能想到的唯一方法,它不需要您在每次有人单击 URI 时都查询数据库。如果您希望我帮助您,您必须共享生成配置文件 URI 的代码。

【讨论】:

    【解决方案3】:

    给定一个原始 URL,例如:

    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
    

    这允许 anything 位于 URL 的 ID 部分后面,而不会干扰 ID 本身。

    然后您可以使用 mysql 查询来选择正确的用户,即使只有他们 id 的前十个字符:

    SELECT * FROM users WHERE LEFT(user_id,10)='" . mysql_real_escape_string($_GET['profile_id']) . "' LIMIT 0, 1;
    

    我在我的一个站点上使用此方法,该站点的条目超过三到四千,并且仅使用 八个 字符(而不是我在这里使用的十个字符)还没有发生任何冲突,并且有还没有看到任何形式的碰撞。

    【讨论】:

      【解决方案4】:

      我认为您应该考虑使用 RewriteMap 来解决您的问题。

      想想这种情况:最终用户请求view/joe-soap/。 RewriteMap 会向服务器询问此用户的 ID,并根据响应实际请求 /view/b2c32b2c782f65be2c299f7b38189a120fd51c89/

      为此,您需要创建一个 PHP 脚本,该脚本接受来自 URL 的用户名(由 RewriteMap 提供),然后返回该用户的 ID。然后,RewriteMap 将允许您静默请求 view/index.php?profile_id=&lt;retrieved_use_id_here&gt;

      我建议你read through the documentation 由Apache 的网站提供。这里还有一些可以帮助您的网站:

      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

      然而:我建议,考虑到这会增加一个额外的请求,您只需使用 PHP 来获取 ID,然后在同一个请求中,从那里继续(正如其他人所建议的) .

      【讨论】:

        猜你喜欢
        • 2017-03-04
        • 1970-01-01
        • 1970-01-01
        • 2020-11-29
        • 1970-01-01
        • 2018-05-21
        • 1970-01-01
        • 1970-01-01
        • 2021-06-30
        相关资源
        最近更新 更多