我正在构建一个包含教程和其他内容的网站。我正在尝试找到一个好的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 /(以及重定向教程/)
答案 0 :(得分:5)
为什么不在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
答案 1 :(得分:1)
为什么不
tutorials/ <-- all tutorials
tutorials/java <-- all Java tutorials
tutorial/a-very-cool-tutorial <-- the very cool tutorial
通过使用单数/复数来区分单个教程和教程列表。这消除了任何歧义的可能性,这可能会给你一些安全感: - )
答案 2 :(得分:1)
这不是'不可能'。您始终可以使用一种方法来检查路径中的最后一项是组还是项,并相应地采取相应措施 - 将控制权交给相关代码。我之前在购物网站上使用过这种技术。
由于项目数通常大于组数,我建议您检查一下您是否作为一个特殊情况处理一个组,并默认情况下退回项目。
这并不是说在URL中有一个额外的参数是错误的,更好或更糟。但你可以按照最初的说法做到这一点。
答案 3 :(得分:0)
tutorials/by-tag/java
tutorials/search/user-search-string
tutorials/ <-- all
tutorials/a-nice-tutorial
解析网址时,您可以查找这些关键字。如果它是未知的,它是一个变量索引传递给父'资源'来解决(教程集合获取“/ a-nice-tut”,搜索对象传递搜索字符串等)。
答案 4 :(得分:0)
这有什么问题?
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
对我来说似乎更直观,并且避免任何歧义。