2009-02-02 2 views
2

Я заменяю старое веб-приложение на новое, с другой структурой.ASP.NET 404 (страница не найдена) перенаправление с сохраненными исходными параметрами

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

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

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

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

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

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

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

EDIT: чтение ответов, похоже, что я не сделал вопрос достаточно ясен:

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

Вопрос: могу ли я сделать это без создания пустых страниц в моем «новом» приложении со старыми именами и Request.Redirect в их OnLoad. То есть это можно сделать с использованием механизма 404 или обработки некоторых событий в Global.asax и т. д.

+0

IIS 6 или 7? Это намного проще в 7. –

+0

это IIS 6 на данный момент –

+0

Да, вам нужно что-то вроде UrlRewritingNet для IIS6, IIS7, эта встроенная функциональность. –

ответ

2

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

+0

это похоже на хороший вариант. Благодарю. –

+0

UrlRewriting (aka mod_rewrite) был долгое время фаворитом для решения этой проблемы на Apache, поэтому получить инструмент для IIS, чтобы сделать то же самое, также будет хорошим выбором. –

0

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

+0

спасибо, см. Последнее изменение в вопросе. –

5

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

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

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

+0

спасибо, см. Последнее изменение в вопросе. –

1

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

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

+0

спасибо, см. Последнее изменение в вопросе. –

+0

Согласен, обработка ошибки в Global.asax OnError сделала бы трюк - поймать ошибку, проверьте, что это 404, работайте там, куда вы должны идти, и перенаправляйте (используя 301, а не Response.Redirect), как обязательный. Все, с чем вы не можете справиться, вы можете вернуть 404, как и раньше. –