堆栈溢出URL如何工作?
我已经构建了我的网站的网址,例如堆栈 溢出网址。我的网址如下。堆栈溢出URL如何工作?
http://www.example.com/1255544/this-is-the-url-text
在这个URL,1255544
是id和this-is-the-url-text
是URL标题文本,无论是存储在数据库中。我注意到,堆栈 溢出URL在id的基础上工作。假设这里是一个堆栈溢出 URL
http://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks
在这个URL,15679171
是帖子的ID。当我改变了这个ID来15706581
而不触及new-way-to-prevent-xss-attacks
并按下Enter键,网址自动更改为以下网址:
http://stackoverflow.com/questions/15706581/simplecursoradapter-does-not-load-
external-sqlite-database-id-error
,当我试图删除一些URL标题文本的部分像下面
http://stackoverflow.com/questions/15679171/new-way-to-preve
它自动校正,如下的URL:
http://stackoverflow.com/questions/15679171/new-way-to-prevent-xss-attacks
这意味着数据被从数据库中检索根据id为15679171
以及相关的URL标题文本new-way-to-prevent-xss-attacks
。
我也想这样做。但问题是,我不明白如果有人更改URL的标识,标题文本应该自动更改。我该怎么做呢?
我已经想好了以下内容:
$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
}
是否执行此操作或不正确的和有效的方式?有解决方案吗?
如果使用Apache,我想你一定知道URL rewriting
在URL重写你的URL改写为一个更友好的样子。看看下面的网址
,当你在上面做一个URL重写,变成这个样子
http://www.downloadsite.com/Nettools/Messengers
URL重写需要在Apache的设置配置(重写规则),以便在PHP解释请求之前重写您的URL,这样您将获得想要获取的确切资源
RewriteRule ^/category$ /content.php
RewriteRule ^/category/([0-9]+)$ /.php?id=$1
RewriteRule
^/category/([0-9]+),([ad]*),([0-9]{0,3}),([0-9]*),([0-9]*$)
cat.php?id=$1&sort=$2&order=$3&start=$4
嗯,我不能在这里解释你的一切,但下面我提供了一些链接,你可以在这里了解URL重写。
这是您可以创建友好网址的最佳方法!
资源:
嗨Mahan,Stack Overflow的习惯是在你的答案本身提供一个例子或解释。这确保了三件事情:如果链接中断,您的答案对未来的访问者仍然有价值,并且它确保人们只需要在堆栈溢出时留下更深入的信息,而不会回答问题的答案。最后,你的例子可以定制,而链接可能是泛化。您可以使用此[编辑]链接进行添加。希望这可以帮助。 – jmort253 2013-04-06 04:58:02
好吧,URL重写有很多方法,每种方法都有很长的路要走,所以我只是把我在网上找到的一些最好的链接。那么我会编辑我的答案 – 2013-04-06 05:02:20
你不必显示*每个*的可能性,但一个例子会阻止你的帖子被标记为不是答案。此外,示例有助于人们学习并增加您的帖子获得更多优惠的机会。祝你好运! :) – jmort253 2013-04-06 05:05:29
你的代码看起来不错,在我的一个堆栈 溢出答案我也建议类似的方法。不过,我只提出一点小改进。相反的:
header("Location: {$rebuilt_url}");
你应该这样做:
header ('HTTP/1.1 301 Moved Permanently');
header("Location: {$rebuilt_url}");
这将让浏览器缓存这些URL积极,每次你的代码和SQL查询将不会被执行。
同时检查:
当页面加载,从您的数据库通过id来获取URL,它的URL从地址栏比较,如果它是不一样的,然后重定向到正确的URL。 – 2013-04-06 04:54:48
另外,小心sql注入(铸造$ url_id到一个int应该做的伎俩)。 – 2013-04-06 05:04:44
你好。您最近发布了一个名为“如何Stackoverflow问题解答系统工作”的问题,并由主持人将其迁移到错误的其他站点。哎呀,为他们拍了':)'。我建议你重新发布它(使用复制和粘贴!),但称它为“如何优化我的类似StackOverflow的系统”。请记住,尽管您可能会在评论中发表一些一般性评论,但它可能会因为太过松散而被封闭。如果你转发,请在这里(@halfer)给我打电话,我会发表评论。 – halfer 2013-04-07 19:11:13