Php -链接特定评论的URL结构


Php - URL structure to link specific comment

背景:我正在Symfony2中构建一个网站的博客部分。

问题:在新闻中链接特定评论的最佳方式是什么?我应该如何定义路由结构?

例子:

单一新闻网址:

example.com/news/{news_id}

单条新闻+评论Url:

example.com/news/{news_id}/comment/{comment_id}  
or  
example.com/news/{news_id}#comment-{comment_id}  
or  
example.com/news/{news_id}?comment={comment_id}

这些只是一些建议…

非常重要:
我需要在控制器中同时使用news_id和comment_id。它们需要是可检索/可用的

建议链接的结构将有不同的结果,并且您的comment_id变量在所有情况下都不会对您的脚本可用。

对新闻页面很重要的东西,它们对SEO的影响不同。

url的前两个变体

example.com/news/{news_id}/评论/{comment_id}

example.com/news/{news_id} ?评论= {comment_id}

  • commment_id 在您的脚本中可用。Symfony将传递给您的控制器,或者您可以从Request对象(或从$_GET变量-但不要这样做)获取它。
  • 浏览器 将不
  • 不用担心,如果你不为同一个页面创建两个路由,就不会有重复的内容
  • 从SEO的角度来看,你正在为每个评论创建一个单独的页面(我知道你不是),这就是谷歌将从url结构中提取的方式。要避免重复内容,只需在HEAD中添加规范链接元素,以指向根url <link rel="canonical" href="example.com/news/{news_id}" />

标签url变量

example.com/news/{news_id} #评论- {comment_id}

  • comment_id 将不在您的脚本中可用。#之后的所有内容都由浏览器直接处理,它根本不会将其发送到服务器。comment_id值仍然可以通过javascript(这就是stackoverflow如何做到这一点)
  • 浏览器 尝试移动(滚动)到html的一部分,其中#之后的键被用作ID..如。<div id="comment_id-123">。如果你的标记中没有这个ID元素,它会留在最上面。
<标题> 解决方案

基于您不希望为每个评论单独的页面的假设,并且您只需要comment_id用于注释的分页。

正确的解决方案是使用URL的#变体。

  • 只加载news_id
  • 的页面
  • 页面加载后,做一个ajax调用与comment_id参数的评论,或第一页,如果没有参数。
  • 用返回的关于页面等的信息更改评论部分
  • 添加加载器图像,这样用户就会知道发生了什么,因为这增加了用户体验。

更适合SEO的选择

如果你想要更好的SEO,更合适的url不是有id,而是有slugs,也没有不必要的单词。我个人的建议是:

example.com/n/{news_slug}#{comment_title_slug}-{comment_id}
// would become something like1
example.com/n/answer-to-life-is-awesome#yeah-it-was-a-great-book-5435335435

如果可以处理解析和db查询,也可以不使用/n前缀。

你混合了两个不同的概念:

<标题> 链接

下面两个链接带有相同的参数,新闻和评论id:

example.com/news/{news_id}/comment/{comment_id}
or  
example.com/news/{news_id}?comment={comment_id}

浏览器打开这些url 将不会滚动页面

带锚的链接

下面的链接只有一个参数,新闻id,并且它使用一个锚:

example.com/news/{news_id}#comment-{comment_id}

打开该URL的浏览器将滚动到锚。

所以这取决于你的需要,如果你想让访问者的浏览器滚动到评论,使用锚(Javascript也可以)。

以下是有效的锚:

<div id="comment-42">...</div>
or
<p><a href="#" name="comment-42">...</a></p>

这里有一个指向这个答案的链接:https://stackoverflow.com/questions/33176341/php-url-structure-to-link-specific-comment/33179630#33179630

参见#! url。

我认为更好的方法是使用#comment-{comment_id},因为其他2个url可能导致重复的url问题。