来自数据库的漂亮网址

时间:2011-04-26 20:46:23

标签: php database slug

我正在尝试在我的网站上获取漂亮的网址..现在他们看起来像这样:

www.site.com/tag.php?id=1

我想将其更改为

www.site.com/tag/1/slug

我的数据库表有ID,标题,信息,Slug

我在网上看了一下slug,但是对于php来说,新手没有运气,任何人都可以帮助我。

2 个答案:

答案 0 :(得分:3)

首先使用以下内容创建.htaccess文件:

# Turn on rewrite engine and redirect broken requests to index
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-l
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* router.php [L,QSA]
</IfModule>

然后,为router.php设置以下代码:

<?php

$segments=explode('/',trim($_SERVER['REQUEST_URI'],'/'),3);

switch($segments[0]){
    case 'tag': // tag/[id]/[slug]
        $_REQUEST['id']=(int)$segments[1];
        $_GET['id']=(int)$segments[1];
        $slug=$segments[2];
        require_once('tag.php');
        break;
}

?>

进一步澄清

的.htaccess

htaccess背后的概念非常简单。我们只是将所有流量重新路由到否则会导致404到router.php的流量,而不是监听URL模式(就像旧的htaccess软件那样),而后者又负责执行所需的操作。有3个重写条目; for(sym)链接,文件和目录(/aaa被视为文件,而/aaa/bbb被视为文件夹)

路由器

$_SERVER['REQUEST_URI']看起来像"/tag/1/slug"。我们首先用冗余斜线修剪它,然后在3个项目中展开它(所以我们不会影响slug,它可能包含其他斜杠),print_r $segments(对于tags / 45 / Hello /世界)看起来像:

Array
(
    [0] => tag
    [1] => 45
    [2] => Hello/World
)

最后,由于我发现您要重定向到tags.php?id=1,因此您需要手动设置$_REQUEST['id']$_GET['id']并加载tags.php

答案 1 :(得分:1)

试试本指南:

http://blogs.sitepoint.com/guide-url-rewriting/

//不是我的博客......

或者这似乎更好:

http://www.yourhtmlsource.com/sitemanagement/urlrewriting.html

编辑:

这是针对apache的,因为我认为这就是你正在使用的