URL переписать без перенаправления в ASP.NET - PullRequest
2 голосов
/ 10 ноября 2010

У нас есть система CMS, которая создает длинные URL-адреса со многими параметрами. Мы хотели бы изменить способ их представления, чтобы сделать их более дружелюбными.
Поскольку у нас уже есть много сайтов, построенных на этой CMS, немного сложно переписать CMS для создания дружественных URL-адресов (хотя мы рассматриваем этот метод, если альтернативы не найдено), мы ищем метод, который, когда пользователь нажимает на длинный URL-адрес, URL-адрес изменится на дружественный - в браузере - без использования Response.Redirect () .
В Wordpress такой метод существует (я не уверен, что это делается в коде или в Apache), и мне интересно, можно ли это сделать и в ASP.NET 2.0.
Еще одна вещь, которую следует принять во внимание, заключается в том, что изменение между URL-адресами должно осуществляться путем доступа к БД.
ОБНОВЛЕНИЕ: Мы используем IIS6

Ответы [ 3 ]

3 голосов
/ 10 ноября 2010

Если вы используете ii7, самый простой способ сделать это - использовать Модуль перезаписи URL По этой ссылке вы можете

Определить мощные правила для преобразования сложных URL-адресов.в простые и согласованные веб-адреса

URL Rewrite позволяет веб-администраторам легко создавать мощные правила, используя провайдеры перезаписи, написанные на .NET, сопоставление шаблонов регулярных выражений и сопоставление с подстановочными знаками, для проверки информации как в URL-адресах, так и в других заголовках HTTP и IISсерверные переменные.Правила могут быть написаны для генерации URL-адресов, которые пользователям будет легче запомнить, для поисковых систем - просто индексировать, а URL-адреса будут соответствовать согласованному и каноническому формату имени хоста.URL Rewrite еще больше упрощает процесс создания правил с поддержкой перезаписи контента, шаблонов правил, переписывания карт, проверки правил и импорта существующих правил mod_rewrite.

В противном случае вам придется использовать методы, описанные Эндрю.M или используйте Response.Redirect.В любом случае я уверен, что все эти методы приводят к ответу http 301.Я упоминаю об этом, потому что не ясно, почему вы не хотите делать Response.Redirect.Это ограничение кодирования?

Обновление Поскольку вы используете IIS 6, вам придется использовать другой метод для перезаписи URL.

Эта статья от Скотта Митчелла подробно описывает, как это сделать.

Реализация перезаписи URL

URLпереписывание может быть реализовано либо с помощью фильтров ISAPI на уровне веб-сервера IIS, либо с помощью модулей HTTP или обработчиков HTTP на уровне ASP.NET.Эта статья посвящена реализации перезаписи URL с помощью ASP.NET, поэтому мы не будем углубляться в особенности реализации перезаписи URL с помощью фильтров ISAPI.Однако для перезаписи URL доступно множество сторонних фильтров ISAPI, таких как:

ISAPI Rewrite

IIS Rewrite

PageXChanger

И многие другие!

В статье рассказывается, как реализовать HTTP-модули или обработчики.

Peformance Ответ перенаправления HTTP 301 обычно содержит только небольшой объем данных <1K.Поэтому я был бы удивлен, если бы это было заметно.Например, разница в загрузке страниц этих URL не заметна </p>

"https://stackoverflow.com/q/4144940/119477"

" /3099193/url-perepisat-bez-perenapravleniya-v-asp-net"

(я подтвердил использование ieHTTPHeaders, что http 301это то, что используется для изменения URL)

Page Rank

Это то, что центральный сайт Google для веб-мастеров говорит о 301.

Если вам нужно изменить URL-адрес страницы, как это показано в результатах поиска, мы рекомендуем использовать перенаправление на сервер 301.Это лучший способ убедиться, что пользователи и поисковые системы направлены на правильную страницу.

1 голос
/ 11 ноября 2010

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

С точки зрения SEO, если страницы, которые создает ваша CMS, имеют старые ссылки, то это то, что поисковые системы будут видеть и индексировать. Вы ничего не можете с этим поделать, JavaScript, перенаправление или что-то еще. (хотя постоянный редирект поможет вам немного продвинуться).

Я также думаю, что то, что вы видели в Wordpres, вероятно, было перенаправлением. Не найдя примера, я не могу быть уверен, хотя. Нужно использовать Fiddler или другой http-отладчик, чтобы увидеть, что происходит, когда вы переходите по одной из этих ссылок.

Для идеального SEO, как только вы получите новые URL-адреса, работающие как исходящие, так и входящие, вам нужно решить, что ваши новые URL-адреса являются окончательными. Сделайте так, чтобы старые URL-адреса перенаправляли на новые URL-адреса, или используйте тег канонической ссылки , чтобы вернуться к новому URL-адресу от старого.

1 голос
/ 10 ноября 2010

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

Единственный способ, которым я думаю, что это будет сделано, - это использовать Javascript для изменения URL в ответ на onclick или document.ready, но это будетбессмысленно.Вам нужно знать новый короткий URL для перезаписи javascript, и если вы знаете это, то почему бы просто не отобразить этот URL в ссылку?

Это звучит больше как выхотите маршрутизацию URL, как это предусмотрено в ASP.Net 4 и 3.5?

Стандартная перезапись URL изменяет объект входящего запроса на сервере, поэтому клиентский браузер отправляет новый URL, а обработчики страницы ниже по течению видят старый URL,Я полагаю, что функции маршрутизации распространяют эту концепцию и на исходящий ответ, переписывая старые URL-адреса на странице ответа в новые URL-адреса, прежде чем они будут отправлены клиенту.

Скотт Гу охватывает эту тему здесь:1010 *

У Скотта Гу также есть старый пост на обычном переписывании URL, в котором изложены несколько различных способов сделать это.Возможно, вы могли бы расширить эту концепцию, подключившись к Application_PreSendRequestContent и вручную изменив все значения href в потоке ответов, но я бы сам не подумал.http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

...