Конфликт коротких URL. Предпочитаете товар или список предметов? - PullRequest
1 голос
/ 09 мая 2009

Я создаю сайт с обучающими программами и другими вещами. Я пытаюсь найти хорошую структуру 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?

Я склонен идти с учебниками / списком / (и перенаправлять учебники / к этому тоже)

Ответы [ 5 ]

5 голосов
/ 09 мая 2009

Почему вы не выражаете иерархию статей в структуре 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

(И вы можете написать третий, который может быть лучше или нет.) Это вопрос вашего вкуса.

В дополнение к выбранной схеме я предлагаю указать идентификатор статьи или дату публикации в 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 голос
/ 09 мая 2009

Это не «невозможно». Вы всегда можете иметь метод проверки, является ли последний элемент в пути группой или элементом, и действовать соответствующим образом, передавая управление соответствующему коду. Я использовал эту технику раньше на сайте покупок.

Поскольку количество элементов, как правило, превышает количество групп, я бы посоветовал проверить, имеете ли вы дело с группой в качестве особого случая, и по умолчанию использовать элемент.

Это не означает, что наличие дополнительного параметра в URL неверно, лучше или хуже. Но вы можете сделать это так, как вы изначально заявили.

1 голос
/ 09 мая 2009

Почему бы не

tutorials/ <-- all tutorials

tutorials/java <-- all Java tutorials

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

, таким образом, различая отдельные учебники и списки учебников, используя единственное / множественное число. Это устраняет любую возможность двусмысленности, которая может дать вам некоторое чувство безопасности: -)

0 голосов
/ 09 мая 2009

Что с этим не так?

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

Мне кажется, это намного более интуитивно понятно и позволяет избежать двусмысленности.

0 голосов
/ 09 мая 2009
tutorials/by-tag/java
tutorials/search/user-search-string
tutorials/   <-- all
tutorials/a-nice-tutorial

При разборе URL вы можете искать эти ключевые слова. Если он неизвестен, то индекс переменной передается родительскому «ресурсу» для разрешения (коллекция учебников получает «/ a-nice-tut», объект поиска передается в строку поиска и т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...