Stack Overflow URL如何工作?

时间:2013-04-06 04:48:40

标签: php url

我已经构建了我的网站的网址,例如Stack Overflow网址。我的网址如下。

http://www.example.com/1255544/this-is-the-url-text

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

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

在此网址中,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从数据库中检索数据,并根据ID附加相关的URL标题文本new-way-to-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
}

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

2 个答案:

答案 0 :(得分:5)

你的代码看起来很不错,在我的Stack Overflow答案中,我也提出了类似的方法。但是,我建议只做一个小改进。而不是:

header("Location: {$rebuilt_url}");

你应该这样做:

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

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

同时检查:

  1. .htaccess if URL is bad do something
  2. .htaccess rewrite friendly URLs

答案 1 :(得分:3)

如果您使用Apache,我认为您必须了解 URL rewriting

在URL重写中,您将URL重写为更友好的外观。请查看以下网址

  

http://www.downloadsite.com?category=34769845698752354

当你对它进行URL重写时,就会变成这样的

http://www.downloadsite.com/Nettools/Messengers

需要在Apache配置(重写规则)上设置URL重写,以便在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重写。

这是您创建友好网址的最佳方式!

<强>资源: