【问题标题】:Short URL conflict. Prefer the item, or list of items?短网址冲突。更喜欢项目还是项目列表?
【发布时间】:2009-05-09 13:14:26
【问题描述】:

我正在构建一个包含教程和其他内容的网站。我正在尝试找到一个好的 URL 结构。但是,我有一个冲突:

tutorials/ <-- list of all tutorials
tutorials/a-very-cool-tutorial <-- points to the very cool tutorial
tutorials/java <-- a list of tutorials tagged java
tutorials/java+soap <-- a list of tutorials tagged java and soap
tools/soap <-- soap tools
tools/wsdl-generator <-- points to the tool
resources/foo <-- resources for a foo
resources/foo+bar <!-- resource for a foo and a bar
tutorials/java?sort=newest
tutorials/php?showhidden=yes&count=30

无法自动解决差异,因此必须更改其中之一。我应该做哪一个

tutorials/show/a-very-cool-tutorial
   VS
tutorials/list/java
or list-of-tutorials or something like that?

我倾向于使用 tutorials/list/(并将 tutorials/ 也重定向到该目录)

【问题讨论】:

    标签: url seo short-url


    【解决方案1】:

    为什么不在 URL 结构中表达文章层次结构?你可以写:

    tutorials/ ← list of all tutorials
    tutorials/java ← a list of java tutorials
    tutorials/java/a-very-cool-tutorial ← points to the very cool tutorial
    

    这样访问者就可以知道一个非常酷的教程是一个 Java 教程,如果你介意 SEO,这个版本也很适合。

    编辑

    根据您的评论,一篇文章可能有多个标签,并且您的网站有属于一个标签集的文章列表。在这种情况下,您可以选择这个概念:

    tutorials/
    tutorials/a-very-cool-tutorial
    tags/java ← tags have a separate prefix
    tags/java+soap
    

    或者其他:

    tutorials/
    tutorials/a-very-cool-tutorial.html
    tutorials/java/
    tutorials/java+soap/ ← the trailing slash indicates that it's a listing
    

    (你可以写第三个,可能更好也可能不好。)这取决于你的口味。

    除了你选择的方案,我建议你把文章ID或发表日期放在URL中,以避免URL冲突。

    tutorials/20090509/a-very-cool-tutorial ← a visitor friendly way
    tutorials/928/a-very-cool-tutorial ← ID in URL like how Stack Overflow does
    

    编辑 2

    您对该问题的最新更新澄清说,除了标签之外,你们都有类似类别的东西——我的意思是教程、工具、资源。它给问题带来了不必要的复杂性。我认为将这些额外的方面也作为标签处理会更好。所以 tutorial 只是像 java 这样的另一个标签,它适用于上述所有想法。

    /a-very-cool-tutorial ← article (beware of URL collision)
    /java/ ← all Java posts
    /tutorials+java+soap/ ← all Java related SOAP tutorials
    /tags/tutorials+soap/ ← you can use an extra prefix
    

    【讨论】:

    • 是的,我也会这样做!
    • 在这种情况下它会起作用,但是“tutorials/java+soap”或“tutorials/java/beginner”或“tutorials/java/hidden”呢
    • 嗯,第一个不会像字面上那样工作,因为我有更多的教程(再次编辑问题)。第二个是最简单的,但我不喜欢 html 附录。
    • 哦,我有第三个,但现在正在远离它:p
    • 你不需要有 HTML 后缀,你可以简单地使用尾部斜杠来表示列表,或者任何其他你可以轻松解析的方法。
    【解决方案2】:

    这不是“不可能”。您始终可以使用一种方法来检查路径中的最后一项是组还是项并采取相应的行动 - 将控制权传递给相关代码。我以前在购物网站上使用过这种技术。

    由于项目的数量通常大于组的数量,我建议您检查您是否将组作为特殊情况处理并默认使用项目。

    这并不是说在 URL 中有一个额外的参数是错误的,更好或更坏。但是你可以按照你最初说的方式来做。

    【讨论】:

    • 我并没有真正提供很多信息,抱歉。我在问题中添加了更多示例,因此您可以看到这很难(尽管可能确实并非不可能)。
    • 好吧,我觉得可以让代码区分一下。我只需要删减一些可能的 URL 形式。
    • 即使在扩展示例中,也没有什么比冲突更重要的了。它非常优雅且易于操作。
    【解决方案3】:

    为什么不

    tutorials/ <-- all tutorials
    
    tutorials/java <-- all Java tutorials
    
    tutorial/a-very-cool-tutorial <-- the very cool tutorial
    

    因此通过使用单数/复数来区分单个教程和教程列表。这消除了任何歧义的可能性,这可能会给你一些安全感:-)

    【讨论】:

    • 这对我来说没有意义。随着时间的推移,可能会有不止一个“非常酷的教程”。然后呢?
    • 以上假设(在我看来并非不合理)每个教程都有一个唯一的名称。 tutorials/java 基于被适当标记的 Java 教程(类似于 SO 如何处理标签和问题)
    【解决方案4】:

    这是怎么回事?

    tutorials/ <-- list of all tutorials
    tutorials/a-very-cool-tutorial <-- points to the very cool tutorial
    tutorials/tags/java <-- a list of tutorials tagged java
    tutorials/tags/java+soap <-- a list of tutorials tagged java and soap
    

    对我来说似乎更直观,并且避免了任何歧义。

    【讨论】:

      【解决方案5】:
      tutorials/by-tag/java
      tutorials/search/user-search-string
      tutorials/   <-- all
      tutorials/a-nice-tutorial
      

      解析url时,可以查找这些关键字。如果未知,它是一个变量索引传递给父“资源”来解析(教程集合获取“/a-nice-tut”,搜索对象传递搜索字符串等)。

      【讨论】:

        猜你喜欢
        • 2014-05-05
        • 1970-01-01
        • 1970-01-01
        • 2011-10-24
        • 1970-01-01
        • 2021-02-07
        • 1970-01-01
        • 2016-03-11
        • 2023-03-22
        相关资源
        最近更新 更多