如何传递ID,但不显示在URL中

时间:2018-12-29 08:10:53

标签: .htaccess url-rewriting friendly-url

我已经在act参数中传递了帖子的标题,如下所示:

$act = explode(' ', strtolower($post['title']));
$act = implode('-', $act);

我在.htaccess中包含了以下代码:

RewriteRule ^([a-zA-Z]+)$ $1.php
RewriteRule ^([0-9]+)/([a-z-]+) test.php?id=$1&act=$2

,我当前的友好网址如下:http://demo.web/1/hello-world 但是,我希望它看起来像这样:http://demo.web/hello-world 但我也想传递ID,因为我是从ID本身获取数据的。将来可能不适合直接按帖子标题写查询,因为一个帖子标题可能与另一个帖子标题匹配。如何传递ID但不显示在URL中?

1 个答案:

答案 0 :(得分:0)

我能想到的两个可能的解决方案...

第一个方法是在保存页面时根据标题创建唯一的URL。

如果保存标题为“ Hello World”的页面,则URL路径可能是...

/ hello-world

此路径与页面的其余内容字段一起保存。

如果以后创建另一个具有相同标题的页面,则其URL可能会变成...

/ hello-world-2

...等等。

第二个选项是将ID包含在URL路径中,而不是RAW整数形式。您可以使用某种哈希或加密,这样就不会直接暴露数据库ID。

一个非常简单的实现可能是在ID中添加一些常量,然后对其进行十六进制编码。

稍微复杂一点的方法可能是对ID进行十六进制编码,然后将其与ID的哈希值和一些秘密密钥结合在一起。

从给定的URL路径中找出数字ID仍然是相当琐碎的,但是对于黑客来说,仅基于ID来创建有效的页面URL将非常困难。

例如,如果我想从站点中提取所有页面内容。如果该网站在URL中使用原始ID,我可以简单地遍历一定范围的猜测ID号,生成每个URL,然后下载页面。

但是,如果URL包含ID +密钥的哈希,则我无法生成有效的URL,而又不知道用于哈希的密钥。