1

我有一个网址

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

4 回答 4

2

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

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

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

我建议您通读Apache 网站提供的文档。这里还有一些可以帮助您的网站:

  1. 理解 Apache 中的 Rewritemaps
  2. 带有 RewriteMap 的 mod_rewrite:外部重写程序
  3. RewriteMap PRG 通过示例使用 PHP For Apache Mod_Rewrite

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

于 2013-05-16T06:29:59.417 回答
0

您可以尝试使用GET变量。www.mywebsite.com/view.php?username=john101

像这样...

PHP (视图.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
?>

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

希望这可以帮助。

于 2013-05-15T21:39:16.443 回答
0

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

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

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

于 2013-05-15T22:05:12.107 回答
0

给定一个原始 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

这允许任何内容都位于 url 的 ID 部分后面,而不会干扰 ID 本身。

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

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

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

于 2013-05-15T22:49:28.653 回答