我通过将GET参数传递到url来显示数据库中的记录:http://example.com/record?id=2
该记录有一个名为"title"的字段,我想用它来重写url,以显示如下:http://example.com/record/title
示例:http://example.com/record/This-is-the-Record-Title
在页面内部,我有一个变量$title,它从记录中提取"title"值。如何使用$title变量来重写上面示例中显示的变量?
答案有两个:
- 设置mod_rewrite以将请求拆分为变量(使用搜索
mod_rewrite
主题),以及 - 创建采用
This-is-the-Record-Title
并将其转换为数字2的反向路由
希望它能带你去你想去的地方。
由于mod_rewrite无法获得有关标题的信息,因此您最好从PHP设置重定向。类似:
/*** find out record title here ***/
$_SESSION['id'] = $_REQUEST['id'];
header('HTTP/1.1 302 Found');
header('Location: http://example.com/record/'.$record_title);
id可以存储在会话变量中,因此您不必反向检索它。更好的做法是使用经过验证的值,例如从数据库行返回的id,因为这不容易受到用户端的任何修改。但是,如果用户通过"漂亮链接"访问记录,则必须从标题中查找记录。
对于mod_rewrite,您应该设置一个内部重写,这样将向用户显示记录标题,而不是实际脚本:
RewriteEngine on
RewriteRule "^/record/(.*)$" "/records.php?title=$1" [PT]