1

我正在构建一个包含教程和其他内容的网站。我正在尝试找到一个好的 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/ 也重定向到那个)

4

5 回答 5

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
于 2009-05-09T13:26:19.377 回答
1

为什么不

tutorials/ <-- all tutorials

tutorials/java <-- all Java tutorials

tutorial/a-very-cool-tutorial <-- the very cool tutorial

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

于 2009-05-09T13:18:58.420 回答
1

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

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

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

于 2009-05-09T13:21:20.950 回答
0
tutorials/by-tag/java
tutorials/search/user-search-string
tutorials/   <-- all
tutorials/a-nice-tutorial

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

于 2009-05-09T13:42:30.567 回答
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

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

于 2009-05-09T15:01:03.470 回答