Как мне создать удобные для пользователя URL-адреса, такие как stackoverflow? - PullRequest
6 голосов
/ 20 июля 2009

Я хочу создать URL-адрес того же типа, что и переполнение стека при создании вопроса.

Пример:

GET / POST без ajax с использованием jQuery (плагин?) non-ajax-get-post-using-jquery-плагин

Меня особенно интересует последняя часть, которую я выделил жирным шрифтом. Как добиться эффекта добавления заголовка страницы к URL с разделителем?

Как называется эта техника?

Ответы [ 7 ]

14 голосов
/ 20 июля 2009

Используйте ASP.NET маршрутизация вместо перезаписи, когда это возможно. Он доступен как для MVC, так и для веб-форм. Маршрутизация гораздо более гибкая и лучше выполняет передачу контекста в код обработки, обработку обратных передач и т. Д.

Вы также можете использовать Модуль перезаписи IIS7 для обработки перезаписи на уровне веб-сервера перед выполнением кода ASP.NET. Есть некоторая хорошая информация о том, как это сделать здесь .

6 голосов
/ 20 июля 2009

Перезапись URL-адреса для SO обеспечивается механизмом маршрутизации в ASP.NET MVC.

5 голосов
/ 20 июля 2009

Stackoverflow запрограммирован в ASP.Net MVC, а маршрутизация URL является стандартной частью пакета в MVC. Помимо маршрутизации URL он также предлагает много других преимуществ. Поэтому, если вы создаете новый веб-сайт и хотите воспользоваться преимуществами URL-маршрутизации, попробуйте сделать это в MVC.

Будьте осторожны, вам придется немного научиться.

5 голосов
/ 20 июля 2009

Этот метод называется перезаписью URL. Вы пометили вопрос как «asp.net», поэтому MSDN может помочь вам в этом: http://msdn.microsoft.com/en-us/library/ms972974.aspx

1 голос
/ 20 июля 2009

Как называется эта техника?

Как и другие говорили, техника называется маршрутизация . По сути, он берет ваш довольно отформатированный URL и отображает его на какое-то действие контроллера. И согласно ответу Джона Галлоуэя IIS 7 имеет эту интегрированную функциональность. В предыдущих версиях IIS вам, вероятно, придется настроить сопоставление сопоставления приложения со средой выполнения ASP.NET и, возможно, добавить собственный HttpModule в конвейер запросов вашего приложения для обработки маршрутизации, если выбранная вами веб-инфраструктура не предоставляет средства маршрутизации.

Как вы достигаете эффекта добавив заголовок страницы в URL с разделителем?

Вы можете сделать это, поместив нижний регистр в заглавие и заменив не алфавитно-цифровые символы дефисами. Иногда этот бит называется слизняком. Вы, вероятно, также хотите уменьшить длину порции, чтобы не столкнуться с проблемами limit length . У вас также есть возможность создания пули в нескольких местах:

  • Когда заголовок будет представлен, сохраните слаг с остальными данными страницы.
  • Или создайте его на лету, когда вы создаете страницы, которые ссылаются на страницу с заголовком.

Имейте в виду, что слагы не должны использоваться для поиска данных страницы, для этого и нужен идентификатор страницы; пуля должна быть необязательной. Ваши правила маршрутизации будут просто касаться получения идентификатора из URL-адреса и передачи его правильному действию контроллера, игнорируя все после. Другими словами, единственной важной частью является идентификатор вопроса. Слизняк - просто сахар. :)

0 голосов
/ 20 июля 2009

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

Я довольно часто видел это в британских газетах - они будут публиковать историю с URL-адресом, похожим на

newspaperdoman.co.uk / статьи / 1128945 / собака кусает человек

, а затем кто-то будет ссылаться на него как

newspaperdoman.co.uk / статьи / 1128945 / газета-в-хрень-история-шокер

или что угодно.

0 голосов
/ 20 июля 2009

Хотя маршрутизация, безусловно, является лучшим вариантом, существуют способы подделать ее с минимальными усилиями. Например, вот простой способ получить дружественные URL-адреса и немного SEO:
Предположим, у вас есть страница:

example.aspx

Даже если ничего не делать, следующий URL будет работать:

example.aspx/some-friendly-text

Вы также можете объединить данные запроса:

example.aspx?id=1
example.aspx/some-friendly-text?id=1

Если вы хотите, вы можете получить доступ к этому тексту, используя PathInfo свойство запроса .

...