【问题标题】:pretty urls from database来自数据库的漂亮网址
【发布时间】:2011-08-13 08:47:53
【问题描述】:

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

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

我想改成

www.site.com/tag/1/slug

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

我在网上阅读了有关 slugs 的信息,但是对于 php 新手来说没有运气,任何人都可以帮助我解决这个问题。

【问题讨论】:

    标签: php database slug


    【解决方案1】:

    首先使用以下内容创建一个.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个重写条目;用于(符号)链接、文件和目录(/aaa 被视为文件,/aaa/bbb 被视为文件夹)

    路由器

    $_SERVER['REQUEST_URI'] 看起来像 "/tag/1/slug"。我们首先对多余的斜线进行修剪,然后将其分解为 3 个项目(因此我们不会影响可能包含其他斜线的 slug),print_ring $segments(用于标签/45/Hello/World)看起来喜欢:

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

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

    【讨论】:

    • 感谢@christian-sciberras,我尝试了 .htaccess 和 router.php。现在当我转到 tag/1/slug 时,它只带我到 router.php。我做错了什么? ?
    • 确保您已安装并启用 apache mod_rewrite。
    • @christian-sciberras 如何手动添加 $_REQUEST['id'] 和 $_GET['id']?...谢谢
    【解决方案2】:

    试试这个指南:

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

    //不是我的博客...

    或者这个看起来更好:

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

    编辑:

    这是给 apache 的,因为我认为这是你使用的

    【讨论】:

      猜你喜欢
      • 2011-10-03
      • 2014-04-22
      • 2012-03-07
      • 1970-01-01
      • 2017-07-27
      • 2011-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多