Googlebot вызывает .NET System.Web.HttpException

У меня есть сайт ASP.NET, смешанный с классическим asp (мы работаем над преобразованием в .NET), и недавно я обновился с .NET 1.1 до .NET 4.0 и переключился на интегрированный конвейер в IIS 7.

Поскольку эти изменения ELMAH сообщают об ошибках с классических страниц asp с практической детализацией (и кодом состояния 404):

System.Web.HttpException (0x80004005)
   at System.Web.CachedPathData.ValidatePath(String physicalPath)
   at System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext context)

Но когда я сама запрашиваю страницу, ошибки не возникает. Все эти ошибки, возникающие в ELMAH, вызваны искателем Googlebot (строка пользовательского агента).

Почему .NET собирает ошибки для классических ASP-страниц? Это связано с интегрированным конвейером?

Любые идеи, почему ошибка возникает только в том случае, если Google сканирует страницу или как я могу получить более подробную информацию, чтобы найти основную ошибку?

Ответ 1

Добавьте это в свой файл web.config:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

Этот отключает проверку по умолчанию, чтобы убедиться, что запрошенные URL-адреса соответствуют правилам пути Windows.

Чтобы воспроизвести проблему, добавьте %20 (пространство с экранированием URL) в конец URL-адреса, например. http://example.org/%20. Общеизвестно, что эта проблема возникает у поисковых искателей, когда они сталкиваются с неверно типизированными ссылками с пробелами, например. <a href="http://example.org/ ">example</a>.

Свойство HttpContext.Request.Url, кажется, обрезает конечное пространство, поэтому инструменты ведения журнала, такие как ELMAH, не показывают фактическую проблему.

Ответ 2

Когда вы перешли от классического конвейера к интегрированному конвейеру, вы, по сути, переключились на .NET, то есть .NET вызовет ASP Parser. Это добавляет возможность настраиваемых HTTPModules, закодированных в управляемом .NET коде, который может изменить результат ответа или в случае elmah, дать вам данные регистрации.

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

Mozilla Firefox - лучший браузер для этого с помощью User Agent Switcher addon

Ответ 3

Похоже, Google crawlers перегружает ссылки, которые больше не существуют. IE могут быть некоторые документы на вашем сайте, которые ссылаются на другие документы, но они удаляются.

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

Ответ 4

Это применимо только в том случае, если вы используете Angular, но вы увидите это, если

<httpRuntime relaxedUrlToFileSystemMapping="false" /> (as mentioned in the previous answers)

и вы используете src вместо ng-src на изображении или теге script, i.e

<img src="{{SomeModelValue}}" />

должен быть

<img ng-src="{{SomeModelValue}}" />

Это также может повлиять на теги A, где вы используете href вместо ng-href.