我不确定这是什么,但我已将其标记为mod-rewrite和.htaccess,因为这些类别中有几个类似的问题。
我以.php结尾的所有页面,我如何更改它以便删除扩展名并将常规URL重写为更友好/可读?
一个具体示例是一个项目页面,其中包含/dir/page.php?itemno=val
形式的项目的链接,其中val
来自数据库,而我想要替换它的文本来自表val
存储在。
$getNames = $db->prepare("
SELECT val, name
FROM items
");
$getNames->execute();
结果集可能如下所示:
val | name
1 | john
2 | bill
3 | anna
4 | tomm
5 | sara
... | ...
如何重写URL以便发生以下情况?
/dir/page.php?itemno=1 becomes /dir/page/john/
/dir/page.php?itemno=2 becomes /dir/page/bill/
/dir/page.php?itemno=3 becomes /dir/page/anna/
...
结果集足够小(20个值),我可以硬编码而不是从SQL中获取,但是如何重写URL会让我感到厌烦。我不确定它是如何完成的。
答案 0 :(得分:2)
您当然可以使用mod_rewrite
执行此操作,唯一需要注意的是Apache(或任何Web服务器)无法访问数据库,因此您必须在每个数据库中查找itemno
请求。
RewriteEngine on
RewriteRule /dir/page/(.*) /dir/page.php?itemno=$1 [L]
现在转到/dir/page/john
实际上会加载/dir/page.php?itemno=john
。