0

我已经搜索了这个问题的答案,并找到了一篇与之相关的文章,但它没有给出确切的答案。可以在这里找到:PHP - 如何用空格替换破折号?

我正在使用此功能将我的博客标题转换为 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; 
}

这会将诸如“我的博客标题”之类的标题转换为“我的博客标题”,这很好。但是我通常在 URL 中传递博客 ID 以从数据库中获取博客,但我试图保持非常友好的 url。

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

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

4

2 回答 2

4

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

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

如果您存储 slug,您可能还需要每个博客类别的 slug。这样,您就可以更接近地模仿文件系统,并且不再需要确保每个 slug 都是完全独一无二的。虽然您不太可能在不同的目录中拥有相同标题的文章,但在您构建网站时需要考虑这一点。

于 2013-02-19T04:52:01.373 回答
0

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

使用.htaccess重写规则

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

URL将被“重写”并作为 GET 参数http://example.com/en/my-life/first-impression 传递。index.phproute

用破折号在 PHP 中分解它。

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

这就是您将如何获取 url 的所有部分并相应地制作您的 PHP 逻辑的方式,

$parts[0] => language code
$parts[1] => category
$parts[2] => post SEO title
于 2017-09-11T05:48:53.643 回答