Php - 链接特定注释的URL结构

时间:2015-10-16 17:34:34

标签: php symfony

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

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

示例:

单一新闻网址:

main

单一新闻+评论网址:

example.com/news/{news_id}

这些只是一些建议......

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

3 个答案:

答案 0 :(得分:2)

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

对于新闻页面而言,它们对SEO有不同的影响。

网址的前两个变种。

  

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

     

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

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

hashtag url variant

  

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

  • comment_id 不会在您的脚本中可用。 #之后的所有内容都是浏览器直接处理的,它根本不会将它发送到服务器。 comment_id值 WILL 仍然可以通过javascript获得(这就是stackoverflow的工作方式)
  • 浏览器 尝试移动(滚动)到html的一部分,其中#之后的密钥用作ID。例如。 <div id="comment_id-123">。如果您的标记中没有带ID的元素,它将保持最佳状态。

溶液

基于您不希望每个评论都有单独页面的假设,并且您只需要使用comment_id来对评论进行分页。

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

  • 仅使用news_id
  • 加载页面
  • 页面加载后,使用comment_id参数进行ajax调用以进行注释,如果没有参数则进行第1页。
  • 使用返回的有关页面等的信息更改评论部分。
  • 添加加载程序图像,这样用户就会知道发生了什么,因为这会增加用户体验。

更多SEO合适的替代

如果你想要更好的搜索引擎优化,更合适的网址将不是ids,但有slug,也没有不必要的单词。我个人建议:

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前缀。

答案 1 :(得分:1)

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

链接

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

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

打开这些网址的浏览器不会滚动页面

与锚

的链接

以下链接只有一个参数,即新闻ID,并使用anchor

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

打开此网址的浏览器将滚动到主播

所以这取决于您的需要,如果您希望访问者的浏览器滚动到评论,请使用锚点(也可以使用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

另见#! URLs

答案 2 :(得分:-1)

我认为更好的方法是使用#comment- {comment_id},因为其他2个网址可能会导致duplicate URLs问题。