URL重写用户配置文件

时间:2013-01-20 04:39:07

标签: .htaccess url-rewriting

我使用哈希值来阻止垃圾邮件并通过更改ID号直接访问用户个人资料。用户在注册,存储在数据库中并且永不更改时,这是一个唯一的整数值。

个人资料链接如下所示:

example.com/profile.php?id=xxx&hash=xyz

我想用用户昵称重写URL,如下所示:

example.com/nickname

但是如何在URL中使用哈希值时这样做呢?我找不到这样的样品!

1 个答案:

答案 0 :(得分:1)

如果我理解你的话:

您希望向最终用户提供多个网址:

  • /profile.php?id=<id>&hash=<hash>
  • /<nickname>

他们都将可用,但第二个将是优先的方式。

/<nickname>类型的网址存在问题,如果昵称是“foo / bar”或“index.php”或“admin”等,则问题是某些昵称可能会覆盖其他一些有效名称网址。所以至少一个更好的虚荣网址格式是:

  • /nick/<nickname>/user/<nickname>

如果您不希望这样,您必须确保昵称永远不会与任何其他资产的有效路径相匹配。

然后你肯定必须处理昵称,空格,“/”,chineses utf16字符,特定于窗口的编码等特殊字符。这通常将应用程序服务器作为处理昵称和查找昵称的最佳工具。要显示的真实用户页面。

现在让我们收回第一个url格式:/profile.php?id=<id>&hash=<hash>,您可以使用哈希来避免通过更改ID来直接访问用户配置文件。你说每个用户都有一个昵称。我会说为什么不仅仅使用虚荣格式并禁止直接访问带有id的profile.php脚本?您可以在内部处理所有用户配置文件,并且永远不会提供此类条目...无论如何,假设您仍然希望能够通过ID访问用户配置文件。

此访问网址由您的应用生成。您的应用程序在提供链接时在URL后添加哈希值(可能哈希是基于昵称的盐渍哈希?)。因此,您的应用程序可以为每个用户存储用户哈希值。然后在profile.php中,你总是检查哈希是否是这个id的正确哈希值。所有这些都在您的应用程序中管理,而不是在http服务器(apache)中管理。在我看来,http服务器及其重写工具不是制作匹配的正确工具,它无法轻松匹配您的外发链接并改变它们,它无法轻松捕获您正在进行的链接并将其转换为正确的profile.php + id +哈希表单。

因此我唯一使用的rewriteRule是一个捕获基于昵称的条目,并将它们内部发送到应用程序中的配置文件重定向器脚本。类似的东西:

RewriteRule  ^/nick/(.*)$ /profile-by-nick.php?nick=$1 [L,QSA]

然后在这个php脚本中,您可以执行您想要提供与profile.php相同的任务。使用编写良好的php应用程序,在应用程序内部提供内部重定向非常容易,不要在profile.php脚本上发送真正的http 302重定向。使用函数,类等。

如果你真的希望apache直接向你的应用程序发送正确的profile.php?id =&amp; hash = url(也许是因为你的php代码是由poney编写的:-))那么你可以按照建议检查RewriteMap @David Ravetti并获得一个作为守护进程运行的外部脚本,并为apache提供昵称 - &gt; id +哈希映射。但它似乎真的更复杂,而不是处理它的正确位置。此脚本需要有权加载数据库,以及应用程序已有的表结构信息。