如何在mysql中存储漂亮的URL并在php中调用它们

时间:2011-03-10 11:22:14

标签: php mysql

我正在试图弄清楚如何做到这一点。目前我的网址看起来像这样:

mysite/1/page-title

1是页面ID,我想摆脱它,所以完整的网址看起来像这样:

mysite/page-title

我找不到一个很好的教程来解释如何在mysql中存储“页面标题”,最重要的是如何在php中调用它...有人可以解释它吗?

2 个答案:

答案 0 :(得分:1)

它通常的工作方式是使用重写规则(基于你使用的服务器,但通常它的Apache和nginx实现了类似的东西)。

基本上,如果有人请求/ some-page,Apache会在内部将其重写为/your_script.php?some_field_in_db=some-page

我提到的原因是我在进一步解释之前确认你使用了相同的东西:)

好的,现在换另一位 - 你想隐藏页面网址中的ID。这意味着您依赖“页面标题”作为数据库中的键(假设您从URL中删除“1”时重写规则有效)。

您需要做的是在db表的page_title列中添加唯一索引(或者如果有的话,可以调用任何列),并且您要根据该键查找页面内容而不是ID。

现在,如果您需要从网址获取“页面标题”的方法 - 这本身就是另一个问题,需要您提供更多解释。

答案 1 :(得分:0)

这就是我将如何做到的。

在mysql中我将添加另一行名为page_title的行varchar(250) unique,然后使用像

这样的函数将文章标题转换为page_title格式
function convert_title($title){
    $title = preg_replace ("~[^a-zA-Z0-9]~", " ", $title);
    $title = preg_replace ("~\s+~", "-", $title);
    $title = substr($title, 0, 225);
    $i = 0;
    do{
        $exists = title_duplicate_check ($title);
        $i++;
    }while ($exists);

    if ( $i > 1) $title .= "_" . $i;

    return $title;
}

function title_duplicate_check ($title){
    //check if the title exists or not 
}

然后在请求页面时,我将从网址获取标题,并使用与您post_title相同的id来检查标题。由于post_title现在是唯一的,因此您可以使用此功能。

希望有所帮助