来自数据库的漂亮url


pretty urls from database

我想在我的网站上得到漂亮的url ..现在他们看起来像这样:

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

我想把它改成

www.site.com/tag/1/slug

我的数据库表有ID,Title,Info,Slug

我在网上读了一些关于鼻涕虫的文章,但是作为php的新手,我没有找到运气,有人能帮我吗?

首先用以下命令创建一个.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背后的概念非常简单。而不是监听URL模式(如旧的htaccess软件所做的),我们只是重新路由所有的流量,否则会导致404到router.php,这反过来会照顾做什么是需要的。有3个重写条目;对于(sym)链接、文件和目录(/aaa被视为文件,而/aaa/bbb被视为文件夹)

路由器

$_SERVER['REQUEST_URI']看起来像"/tag/1/slug"。我们首先对多余的斜杠进行修剪,然后将其分解为3个条目(所以我们不影响slug,它可能包含其他斜杠),print_r$segments(对于标签/45/Hello/World)看起来像:

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

最后,因为我看到你想重定向到tags.php?id=1,你需要做的是手动设置$_REQUEST['id']$_GET['id'],并加载tags.php

试试这个指南:

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

//not my blog…

或者这个看起来更好:

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

编辑: