Назад | Перейти на главную страницу

Как поймать все неправильные (urls) запросы к моему приложению ASP.NET?

У меня есть веб-сайт ASP.NET, и чтобы поймать неправильные запросы URL-адресов и перенаправить их на домашнюю страницу, я поместил:

<customErrors defaultRedirect="/" mode="On">
        <error statusCode="404" redirect="~/"/>
    </customErrors>

в моем web.config

Это работает только для таких страниц, как http://mywebsite/wrong.aspx но не для папки (например: http://mywebsite/wrong-folder/)

Я понял, что мне нужно перехватить все запросы, чтобы решить эту проблему, но у меня нет доступа к IIS, чтобы выполнить эту настройку с помощью ISAPI ...

Можно ли это сделать в web.config? У вас есть пример?

В <customErrors>...</customErrors> Тег контролирует только то, что ASP.NET будет делать при возникновении ошибки. Если вы обращаетесь к несуществующему каталогу, ошибка будет обработана IIS, а не ASP.NET.

Следовательно, вы должны изменить обработку 404 IIS. Это можно сделать только через applicationHost.config файл, который обычно доступен только с правами администратора. Ниже приводится отрывок из этого файла, который изменяет обработку 404 на настраиваемую страницу для определенного веб-сайта:

<location path="[Your Site Name]">
    <system.webServer>
        <httpErrors errorMode="DetailedLocalOnly">
            <remove statusCode="404" subStatusCode="-1" />
            <error statusCode="404" prefixLanguageFilePath="" path="/your-404-handler.aspx" responseMode="ExecuteURL" />
        </httpErrors>
    </system.webServer>
</location>

Вы также можете изменить это через IIS Mananger через: Sites -> [Your Site Name] -> Error Pages -> 404

Это можно сделать, используя Microsoft URL Rewrite. Если модуль установлен, добавьте следующее правило в свой web.config. Любой запрос, не соответствующий MyPage.aspx (без учета регистра), ответит отправкой HTTP 301 с MyPage.aspx в качестве нового местоположения. Вам нужно будет занести в белый список все допустимые URL-адреса в «условиях», хотя это альтернатива использованию настраиваемых ошибок.

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="RedirectToMyPage" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{REQUEST_URI}" pattern="^MyPage.aspx$" negate="true" />
          </conditions>
          <action type="Redirect" url="MyPage.aspx" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Другой вариант - использовать перезапись URL и customErrors, настроив customErrors для перенаправления ошибок 404 на страницу, такую ​​как "/404Error.aspx" (которая не обязательно должна существовать), а затем иметь правило перезаписи URL, которое перенаправит все запросы для " /404Error.aspx "на вашу домашнюю страницу. Это правило перезаписи URL будет выглядеть так:

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="RedirectToMyPage" stopProcessing="true">
          <match url=".*" />
          <conditions>
            <add input="{REQUEST_URI}" pattern="^404Error.aspx$" />
          </conditions>
          <action type="Redirect" url="MyPage.aspx" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>