使用.htaccess重写post.php?post_id = 20到/ post / this-is-the-title /

时间:2012-09-24 15:37:10

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

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

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

这样的事情:

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

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

3 个答案:

答案 0 :(得分:4)

如果页面标题是数据库驱动的(或其他动态的),我看不出你如何逃避.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"];

答案 1 :(得分:0)

你做不到。您必须将标题放在查询字符串上。 .htaccess无法安全地从数据库中获取任何内容。 由于您要重写URL,为什么不简单地在URI中写帖子标题?

答案 2 :(得分:0)

你不能用.htaccess这样做,因为你需要以某种方式从SQL数据库获取“博客帖子的标题”,用PHP重定向。 :)