我已经在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中?
答案 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,而又不知道用于哈希的密钥。