背景信息:我正在Symfony2中构建网站的博客部分。
问题: 在新闻中链接特定评论的最佳方式是哪种?我该如何定义路线结构?
示例:
单一新闻网址:
main
单一新闻+评论网址:
example.com/news/{news_id}
这些只是一些建议......
非常重要:
我需要在控制器中使用news_id和comment_id。它们需要可检索/可用。
答案 0 :(得分:2)
建议链接的结构将有不同的结果,并且您的comment_id变量在所有情况下都不适用于您的脚本。
对于新闻页面而言,它们对SEO有不同的影响。
example.com/news/ {news_id} /评论/ {COMMENT_ID}
example.com/news/ {news_id}?评论= {} COMMENT_ID
commment_id
将在您的脚本中可用。 Symfony将传递给您的控制器,或者您将能够从Request对象(或$ _GET变量 - 但不要这样做)获取它<link rel="canonical" href="example.com/news/{news_id}" />
example.com/news/ {news_id}#comment- {COMMENT_ID}
comment_id
不会在您的脚本中可用。 #
之后的所有内容都是浏览器直接处理的,它根本不会将它发送到服务器。 comment_id值 WILL 仍然可以通过javascript获得(这就是stackoverflow的工作方式)#
之后的密钥用作ID。例如。 <div id="comment_id-123">
。如果您的标记中没有带ID的元素,它将保持最佳状态。基于您不希望每个评论都有单独页面的假设,并且您只需要使用comment_id来对评论进行分页。
正确的解决方案是使用URL的#变体。
如果你想要更好的搜索引擎优化,更合适的网址将不是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问题。