我已经搜索了这个问题的答案,并找到了一篇与之相关的文章,但它没有给出确切的答案。可在此处找到: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查询时查询数据库?
答案 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