2013-02-14 149 views
0

我已经搜索了这个问题的答案已经找到一篇文章,但它并没有给出确切的答案。这可以在这里找到:PHP - How can I replace dashes with spaces?搜索引擎优化友好的URL和查询数据库php

我使用这个功能到我的博客标题转换成搜索引擎友好的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; 
} 

将转换标题像这样“我的博客标题”到“我的-博客-title“,这很好。不过,我通常在URL中传递博客ID以从数据库中获取博客,但我试图保留真正友好的URL。

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

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

+1

你总是可以用一个半题为结构去(这仍然是搜索引擎友好) 示例: http://site.com/my-blog-title/234/ 其中,234是条目ID。 – 2013-02-14 03:21:03

+0

不能让你的网址是'example.com/id/title'例如:'example.com/1/my-blog-title'和'explode('/'$ input)' – Class 2013-02-14 03:21:16

+0

感谢理查德,我想我没有'甚至想到这一点。我会放弃这一点。我只是想,因为我看到很多博客都这样做,这样做有一个更简单的方法。 – 2013-02-14 03:24:04

回答

4

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

例如,假设您发现并修复了Seo功能中的错误,可能会改变您的网址,这显然是不好的SEO。将数据库存储在数据库中可以避免这个问题。

如果你存储slu,,你可能还需要为每个博客类别设置一个slu g。这样你就更加模仿文件系统,不再需要确保每个子弹都是独一无二的。虽然不太可能在不同的目录中拥有相同标题的文章,但在构建网站时需要考虑这一点。

+0

感谢你们,这是一个很好的方法来实现我想要做的事情。 – 2013-02-19 18:23:31

0

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

使用.htaccess重写规则

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

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

用破折号在PHP中展开它。

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

这是你将如何让网址的各个部分,并相应地使你的PHP逻辑,

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