Настройка настраиваемой страницы ASP 404 с перенаправлением для веб-сайта IIS7 - PullRequest
2 голосов
/ 16 мая 2011

Мы переносим существующий веб-сайт с IIS6 на IIS7, но испытываем некоторые трудности при настройке страницы с ошибкой 404. Наша страница с ошибкой 404 работает так:

  • Пользовательская ASP-страница проверяет URL по короткому списку «специальных» URL (например, http://example.com/limited-offers).
  • Если URL-адрес известен, он перенаправляется на фактический URL-адрес этой страницы.
  • В противном случае посетитель перенаправляется на страницу статических ошибок с кодом состояния 404.

В IIS6 это работало так, как рекламировалось, но в IIS7 некоторые вещи изменились. IIS7 всегда будет отображать настроенную страницу ошибок, когда обнаружит код состояния, для которого определена страница ошибок. В случае нашей статической страницы ошибок с кодом состояния 404 это означает, что IIS7 снова выполнит пользовательскую ASP-страницу. Это приводит к бесконечному перенаправлению.

Мы обнаружили, что это поведение можно обойти, добавив параметр в Web.Config

<system.webServer>
  <httpErrors existingResponse="PassThrough" />
</system.webServer>

Однако после добавления этого наша настраиваемая ASP-страница отказывается от перенаправления. После проверки с помощью Fiddler кажется, что IIS7 вызывает код состояния 404, перезаписывая наше перенаправление 302.

Кто-нибудь может порекомендовать другой подход для решения нашей проблемы?

Ответы [ 3 ]

6 голосов
/ 16 мая 2011

Я успешно использую аналогичную настройку, которую я перенес с IIS 6 на IIS 7. Мой web.config имеет следующий раздел:

<system.webServer>
    <httpErrors errorMode="Custom">
        <remove statusCode="500" subStatusCode="-1" />
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" prefixLanguageFilePath="" path="/302page.asp" responseMode="ExecuteURL" />
        <error statusCode="500" prefixLanguageFilePath="" path="/500page.asp" responseMode="ExecuteURL" />
        <error statusCode="500" subStatusCode="100" path="/500page.asp" responseMode="ExecuteURL" />
    </httpErrors>
<system.webServer>

Я настроил это на соответствующем сайте с помощью диспетчера IIS, но вы можете сделать это через файл web.config, если вам проще.

Вы можете добавить условный заголовок в зависимости от того, должен ли он быть 301, 302 или 404.

404; * * 1 010

Response.Status = "404 Not Found"
Response.AddHeader "Location", pagename

302 (временное перенаправление);

Response.Status="301 Object Moved"
Response.AddHeader "Location", pagename

301 (постоянное перенаправление);

Response.Status="301 Moved Permanently"
Response.AddHeader "Location", pagename

Пул приложений сайта IIS использует интегрированный конвейерный режим. А также прилагаются настройки для раздела отладки для сайта.

settings for debugging section for site

2 голосов
/ 29 октября 2012

Я столкнулся с подобным сценарием для клиента на прошлой неделе. Решением было настроить ваш <httpErrors> следующим образом:

<httpErrors errorMode="Custom" existingResponse="Auto">

  <remove statusCode="404" subStatusCode="-1" />
  <error statusCode="404" 
         prefixLanguageFilePath="" 
         path="/404.asp" 
         responseMode="ExecuteURL" />

  <remove statusCode="500" subStatusCode="100" />
  <error statusCode="500" 
         subStatusCode="100" 
         prefixLanguageFilePath="" 
         path="/500-100.asp" 
         responseMode="ExecuteURL" />

</httpErrors>

Это работает с Cactushop (написанным на Classic ASP), который имеет «дружественные» URL-адреса и где они используют страницу обработчика 404 для анализа URL-адреса и отображения продуктов или списка категорий продуктов и т. Д.

1 голос
/ 16 мая 2011

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

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

...