如何将一个URL从something.php?var = val更改为更可读/友好的内容?

时间:2015-08-26 20:04:05

标签: php .htaccess url mod-rewrite

我不确定这是什么,但我已将其标记为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会让我感到厌烦。我不确定它是如何完成的。

1 个答案:

答案 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