【问题标题】:Use .htaccess to rewrite post.php?post_id=20 to /post/this-is-the-title/使用 .htaccess 将 post.php?post_id=20 重写为 /post/this-is-the-title/
【发布时间】:2012-09-24 15:37:10
【问题描述】:

我是 .htacces 的新手,多年来我一直试图从以下位置获取我的域:

www.domain.com/post.php?post_id=20

到这样的事情:

www.domain.com/post/this-is-the-title/

正如我所说,我是 .htaccess 的新手,但任何事情都会有所帮助! 注意:我会以某种方式从 SQL 数据库中获取我的博客文章的标题

【问题讨论】:

    标签: php .htaccess mod-rewrite redirect url-rewriting


    【解决方案1】:

    如果页面标题是数据库驱动的(或其他动态的),我看不出你怎么能摆脱 .htaccess 重写。在 PHP 脚本中使用路由会更有意义。

    我写过一个非常简单的路由方法here。它仅供人们进入该主题,但您应该能够基于此构建一个数据库驱动的路由器。

    基本上,通过 index.php 路由所有流量,然后在那里获取请求 URI 并决定要加载哪些资源。

    [编辑]

    让我详细说明一下,使用我博客文章中的信息。

    假设您的网站已设置并运行,首先将流量定向到 index.php。您在 .htaccess 中执行此操作,可以这样完成:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} -s [OR]
    RewriteCond %{REQUEST_FILENAME} -l [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^.*$ - [NC,L]
    RewriteRule ^.*$ index.php [NC,L]
    

    然后,在 index.php(或从 index.php 调用的脚本)中,您可以获得请求 URI:

    $uri = $_SERVER["REQUEST_URI"];
    

    好的,到目前为止一切顺利。现在让我们假设您的数据库包含页面内容以及页面别名。 uri 很可能是页面别名,所以你需要做的就是这样:

    $pdo = new PDO(/* your db connection params */);
    $page = $pdo
        ->query("SELECT * FROM pages WHERE alias = :alias",
        array("alias" => $uri)
        )
        ->fetch();
    

    此时您应该在 URI 字符串中拥有与标题(或别名)相对应的页面内容。您现在需要做的就是以任何您想要的方式显示它:

    echo $page["content"];
    

    【讨论】:

    • 我知道这是旧的,但我有时间尝试一下,我应该在 index.php 中的哪个位置放置 '$uri = $_SERVER["REQUEST_URI"];'?我把它放在任何地方,它只是文本而不是代码
    • 为了让您的代码被评估为 PHP,它必须位于 PHP 标签内:<?php ?>
    【解决方案2】:

    你不能。您必须将标题放在查询字符串上。 .htaccess 无法安全地从数据库中获取任何内容。 既然要重写url,为什么不直接把文章标题写在URI里呢?

    【讨论】:

      【解决方案3】:

      你不能用 .htaccess 做到这一点,因为你需要“以某种方式从 SQL 数据库中获取你的博客文章的标题”,用 PHP 进行重定向。 :)

      【讨论】:

        猜你喜欢
        • 2021-05-03
        • 2015-08-19
        • 2013-02-11
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        • 2020-10-18
        • 2014-11-23
        • 2014-12-11
        相关资源
        最近更新 更多