SEO友好的URL和查询数据库PHP

时间:2013-02-14 03:16:44

标签: php url mod-rewrite url-rewriting slug

我已经搜索了这个问题的答案,并找到了一篇与之相关的文章,但它没有给出确切的答案。可在此处找到:PHP - How can I replace dashes with spaces?

我正在使用此功能将我的博客标题转换为SEO友好的URL字符串:

//SEO Friendly URLS
public static function Seo($input){
    $input = str_replace(array("'", "-"), "", $input); 
    $input = mb_convert_case($input, MB_CASE_LOWER, "UTF-8"); 
    $input = preg_replace("#[^a-zA-Z0-9]+#", "-", $input); 
    $input = preg_replace("#(-){2,}#", "$1", $input); 
    $input = trim($input, "-"); 
    return $input; 
}

将“My Blog Title”等标题转换为“my-blog-title”,这很好。但是我通常会在URL中传递博客ID以从数据库中获取博客,但我正在尝试保持非常友好的URL。

据我所知,我可以将博客ID作为第二个查询字符串传递给标题末尾,例如mysite.com/page.php?post=my-blog-post&id=1,但这看起来仍然很糟糕。我将使用.htaccess删除.php和'?'来自URL,但我不确定如何在传递ID时保留一个漂亮的URL。

如何在使用博客标题作为URL查询时查询数据库?

2 个答案:

答案 0 :(得分:4)

URL友好版本的标题通常被称为slugs。如果将slug存储在数据库表中,则可以使用它来检索文章。无论如何最好存储slug,这样一旦slug创建它就永远不会改变。

例如,假设您发现并修复了Seo函数中的错误,它可能会更改您的URL,这显然是糟糕的SEO。在数据库中存储slug可以避免这个问题。

如果你存储了slug,你可能也希望每个博客类别都有一个slug。通过这种方式,您可以更加模仿文件系统,并且不再需要确保每个slug都是完全独特的。虽然您不太可能在不同目录中拥有相同标题的文章,但在构建网站时需要考虑这些问题。

答案 1 :(得分:0)

您可以将mod_rewrite模块用于Apache。这是最常见的做法。

使用.htaccess重写规则

RewriteRule ^([^?]*) index.php?route=$1 [L,QSA]

网址http://example.com/en/my-life/first-impression 将被“重写”并作为GET参数index.php传递给route

用破折号在PHP中进行了爆炸。

$parts = explode('/', $_GET['route']);

这将是你获取url的所有部分并相应地制作PHP逻辑的方法,

$parts[0] => language code
$parts[1] => category
$parts[2] => post SEO title