微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – 重写URL,用查询字符串中的标题替换ID

我对mod_rewrite很新,但我已经做了一些搜索,无法找到这个问题的答案.我有一个网站,只有一个PHP页面提供数十页内容,具体取决于在查询字符串中传递给它的ID.我想重写URL,以便此ID消失,并替换为从数据库中绘制的页面标题.例如

www.example.com/index.PHP?id=19

被替换为

www.example.com/my-page-title

其中“my-page-title”是存储在索引19的数据库中的页面标题.

有没有人有这种重写的经验,或者甚至可能吗?

谢谢,

HR

解决方法:

当然可能,对于PHP脚本,你的.htaccess可能看起来像这样:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$index.PHP?url=$1 [QSA,L]
</IfModule>

这会将除目录或文件名之外的所有URL重写为“index.PHP?url = THE-TYPED-ADDRESS”.

在index.PHP中,您可以使用$_GET [‘url’]的值来确定ID:

// init DB layer
if (isset($_GET['url']) && !empty($_GET['url'])) {
  $url = my_filter_function($_GET['url']); // filter input
  $pdo = my_get_pdo_function(); // get configured PDO objected
  $query = "SELECT id FROM my_router_table WHERE url = ? LIMIT 1"; // use prepared statements for security/performance reasons

  $stmt = $pdo->prepare($query);
  $stmt->bindValue(1, $url, PDO::ParaM_STR); // bind the value as a string

  // ternary operator expanded for readability
  if ($stmt->execute()) {
    $id = $stmt->fetch(PDO::FETCH_ASSOC);
  } else {
    $id = -1; // 404 page
  }

  // fetch content/render page according to ID
}

这显然是一个过于简化的示例,您应该确保正确地逃避输入并使用预准备语句来避免安全风险.此外,如果您使用MysqLi或其他数据库访问层,则prepare / execute / fetch代码会略有不同.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐