8

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

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

在这个 URL 中,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

在此 URL 中,15679171是帖子的 ID。当我将此 id 更改为15706581不触摸new-way-to-prevent-xss-attacks并按 Enter 时,URL 自动更改为以下 URL:

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 从数据库中检索数据,并且根据 id附加15679171了相关的 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
}

执行此操作是否正确且有效?有解决办法吗?

4

2 回答 2

5

您的代码看起来不错,在我的 Stack Overflow 答案之一中,我也提出了类似的方法。但是,我建议只进行一项小的改进。代替:

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

你应该做:

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

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

还要检查:

  1. .htaccess 如果 URL 不好做某事
  2. .htaccess 重写友好的 URL
于 2013-04-06T05:02:40.507 回答
3

如果你使用Apache,我想你一定知道URL 重写

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

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

当你对其进行 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 重写。

这是创建友好 URL 的最佳技巧!

资源:

于 2013-04-06T04:53:33.287 回答