php – Stack Overflow URL如何工作?

我已经构建了我的网站的URL,如Stack Overflow URL.我的网址如下.
http://www.example.com/1255544/this-is-the-url-text

在此URL中,1255544是id,而this-the-url-text是URL标题文本,两者都存储在数据库中.我注意到Stack Overflow URL在id的基础上工作.假设这是一个Stack Overflow URL

https://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks

在此URL中,15679171是帖子的ID.当我将此id更改为15706581而未触及new-way-prevent-prevent-xss-attacks并按Enter键时,URL会自动更改为以下URL:

https://stackoverflow.com/questions/15706581/simplecursoradapter-does-not-load-
external-sqlite-database-id-error

当我试图删除URL标题文本的一些部分,如下所示

https://stackoverflow.com/questions/15679171/new-way-to-preve

它会自动更正URL,如下所示:

https://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks

这意味着基于id 15679171从数据库中检索数据,并根据id附加相关的URL标题文本new-way-prevent-prevent-xss-attacks.

我也想这样做.但问题是,我不明白,如果有人更改了URL的ID,标题文本应该自动更改.我该怎么做呢?

我想到了以下几点:

$url_id = $_GET["id"];
$url_txt = $_GET["url_txt"];

$qry = "SELECT * FROM mytable WHERE url_id = '{$url_id}' LIMIT 1";
$data = MysqL_query($qry);
$data_set = MysqL_fetch_array($data);

if($url_txt== $data_set["url_txt"]) {
    // proceed further
} else {
     $rebuilt_url = "http://www.example.com/" . $url_id . "/" . $data_set["url_txt"];
     header("Location: {$rebuilt_url}")  // Redirect to this URL
}

这是否是执行此操作的正确有效方法?有解决方案吗?

你的代码看起来很不错,在我的Stack Overflow答案中,我也提出了类似的方法.但是,我建议只做一个小的改进.代替:
header("Location: {$rebuilt_url}");

你应该做:

header ('HTTP/1.1 301 Moved Permanently');
header("Location: {$rebuilt_url}");

这将使浏览器积极地缓存这些URL,并且每次都不会执行代码SQL查询.

还检查:

> .htaccess if URL is bad do something
> .htaccess rewrite friendly URLs

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...