У меня есть веб-сайт 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>