我对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 举报,一经查实,本站将立刻删除。