【问题标题】:How do you change an URL from something.php?var=val to something more readable/friendly?如何将 URL 从 something.php?var=val 更改为更易读/更友好的 URL?
【发布时间】:2015-08-26 20:04:04
【问题描述】:

我不确定这叫什么,但我已将其标记为 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 让我无法理解。我不确定它是如何完成的。

【问题讨论】:

  • mod_rewrite 规则由网络服务器 (apache) 完成,无法访问数据库中的值。您可以创建 URL /dir/page/john/,但随后您必须在数据库中查找 ID(我假设没有任何重复的名称)。

标签: php .htaccess url mod-rewrite


【解决方案1】:

您当然可以使用mod_rewrite 执行此操作,唯一需要注意的是 Apache(或任何 Web 服务器)无法访问数据库,因此您必须在每个请求中查找 itemno

RewriteEngine on
RewriteRule /dir/page/(.*) /dir/page.php?itemno=$1 [L]

现在转到/dir/page/john 实际上会加载/dir/page.php?itemno=john

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2016-12-26
    • 2011-08-27
    • 1970-01-01
    • 2012-12-02
    • 2021-10-15
    相关资源
    最近更新 更多