代码之家  ›  专栏  ›  技术社区  ›  the subfolders

是否有可能在没有$_GET[“sligs”]的情况下拥有友好的url?

  •  -2
  • the subfolders  · 技术社区  · 2 年前

    我有一个PHP脚本,可以使用以下参数将新文章保存到MySQL中:

    ID, Date, Category, Title, Content, Slug 其中Slug是相同的标题,但带有破折号,如下所示:

    this-is-a-nice-title
    

    然后我有articles.php,其中显示了所有文章并链接到read-article.php,在这里可以在seo友好的url中阅读所选文章,如下所示

    domain.com/news/this-is-a-nice-title
    

    就像其他人一样,页面read-article.php向MySQL发送一个查询,如下所示:

    SELECT * FROM articles WHERE slug=?
    

    直到一切都好了,互联网上的每一个教程告诉你要这样做,它就起作用了。

    但问题是:如果一些文章因任何原因、任何错误或失误而具有相同的标题,那将是一个问题。因此,最好使用ID进行查询,如下所示:

    SELECT * FROM articles WHERE id=?
    

    问题是,我无法使其工作,我总是收到错误404,因为当没有结果时,我在测试/开发时将其设置为error-404.php

    没有教程教你如何在不通过slug名称查询MySQL的情况下创建友好的url。因此,我的问题是:除了在MySQL中查询slug之外,还有其他方法可以做到吗?

    1 回复  |  直到 2 年前
        1
  •  0
  •   Kamikaza    2 年前

    是的,有可能以一种非常简单的方式实现:

    当您使用slug链接访问者时,只需将id添加到其中,例如:

    <a href="<?php echo $row['slug'];?>&id=<?php echo $row['id'];?>">
    <?php echo $row['title'];?>
    </a>
    

    然后在slug页面中,您只需按ID而不是slug查询选择 别忘了像这样编辑你的htaccess文件:

    RewriteRule ^([-/.a-zA-Z0-9]+)$ slug.php?slug=$1&id=$2 [QSA,END]
    
        2
  •  0
  •   ADyson    2 年前

    这听起来像是一个 X-Y Problem .

    如果文章可以有相同的标题,那么你的系统需要确保它们没有用相同的slug保存。

    例如,如果它发现它试图保存一个与现有值重复的值,那么它可以在slug的末尾附加一些随机字符、序列号、时间戳——任何使其唯一的东西。

    你到底怎么做可能并不重要,关键是要有一个确保没有重复的过程。从源头上解决问题通常比试图找到解决方法更容易。

    最终,如果有两个完全相同的slug,系统在解析URL时将永远无法将它们区分开来,所以你一开始就不能允许这种情况发生。

    不存在按ID查询的问题,因为您在需要时没有ID。您所拥有的只是URL中的slug值。这显示了用户请求显示的帖子,而URL中不包含任何其他相关信息。因此,这是您需要查询的对象,为了使其正常工作,您的系统必须确保每个slug在数据库中都是唯一的。

    推荐文章