ASP.NET 404 (страница не найдена) перенаправление с сохранением исходных параметров

Я заменяю старое веб-приложение новым с другой структурой.

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

Допустим, у меня есть пользователь, у которого есть эта закладка:

http://server/webapp/oldpage.aspx?data=somedata

Мое новое приложение будет находиться в том же виртуальном каталоге, заменив старое, но у него больше нет oldpage.aspx, вместо этого у него другой макет, но ему все еще нужен параметр из старого URL-адреса.

Итак, я установил перенаправление ошибок 404 на redirectfrombookmark.aspx, где я решаю, как обработать запрос.

Проблема в том, что единственный параметр, который я получаю, это «aspxerrorpath=/webapp/oldpage.aspx», но не параметр «данные», и он мне нужен для правильной обработки запроса.

Любая идея, как я могу получить полный «исходный» URL-адрес в обработчике 404?

РЕДАКТИРОВАТЬ: читая ответы, похоже, я недостаточно ясно изложил вопрос:

  1. Пользователи добавили в закладки много разных страниц (oldpage1, oldpage2 и т. д.), и я должен обращаться с ними одинаково.
  2. Параметры для каждой старой страницы почти одинаковые, а мне нужны только определенные.
  3. Я хочу повторно использовать «старое» имя виртуального каталога для «нового» приложения.
  4. Поисковые боты и т. д. не проблема, это внутреннее приложение с динамическим контентом, срок действия которого очень часто истекает.

Вопрос в том, могу ли я сделать это без создания кучи пустых страниц в моем "новом" приложении со старыми именами и Request.Redirect в их OnLoad. т.е. можно ли это сделать с помощью механизма 404 или некоторой обработки событий в Global.asax и т. д.


person Sunny Milenov    schedule 02.02.2009    source источник
comment
ИИС 6 или 7? В 7 намного проще.   -  person Diodeus - James MacFarlane    schedule 02.02.2009
comment
Да, вам нужно что-то вроде UrlRewritingNet для IIS6, IIS7 со встроенной функциональностью.   -  person Diodeus - James MacFarlane    schedule 02.02.2009


Ответы (4)


Вы можете изучить компонент UrlRewritingNet.

person John Rasch    schedule 02.02.2009
comment
UrlRewriting (также известный как mod_rewrite) долгое время был фаворитом для решения этой проблемы в Apache, поэтому хорошим выбором будет приобретение инструмента для IIS, который делает то же самое. - person Bryan Rehbein; 03.02.2009

В целях SEO вы должны никогда не перенаправлять пользователей при ошибке 404. Ошибка 404 должна быть тупиковой, с некоторой полезной информацией о том, как найти страницу, которую вы ищете, например, с картой сайта.

Вы должны использовать 301, перемещенный навсегда. Это позволяет поисковым ботам обновлять свой индекс без потери ранга страницы, присвоенного исходной странице.

См.: http://www.webconfs.com/how-to-redirect-a-webpage.php о том, как кодировать этот тип ответа.

person Diodeus - James MacFarlane    schedule 02.02.2009

Вам также следует изучить возможность использования некоторых событий в файле Global.ascx(?extention) для проверки на наличие ошибок и разумного перенаправления. Событие OnError — это то, с чем вы хотите работать. У вас будут переменные из запроса в этот момент времени (в объекте HttpContext), и вы можете заставить свой код работать там вместо 404. Если вы пойдете по этому пути, убедитесь, что вы правильно перенаправляете 404 для чего-либо, кроме oldpage .aspx.

Мне жаль, что у меня сейчас нет явных примеров или информации, надеюсь, это укажет вам правильное направление.

person Bryan Rehbein    schedule 02.02.2009
comment
Я согласен, обработка ошибки в Global.asax OnError сделает свое дело - поймать ошибку, убедиться, что это 404, определить, куда вы должны идти, и перенаправить (используя 301, а не Response.Redirect) по мере необходимости. . Все, с чем вы не можете справиться, вы можете вернуть 404, как и раньше. - person Zhaph - Ben Duguid; 03.02.2009

Параметры POST и GET доступны только для каждого запроса. Если вы уже знаете имя старой страницы (OldPage.aspx), почему бы просто не добавить туда пользовательское перенаправление?

person Igor Zelaya    schedule 02.02.2009