IIS URL Rewrite и ARR неправильно обрабатывают правило перезаписи - PullRequest
0 голосов
/ 27 августа 2018

У меня проблема с некоторым пониманием того, как URL Rewrite и ARR работают вместе. У меня есть сайт и отдельная служба, которая генерирует и предоставляет обновленные карты сайта для сайта. Ниже мое правило для обработки запросов карты сайта. Это локальное правило в файле web.config в каталоге сайтов (сайт размещен в IIS 10).

<rule name="Sitemap Rule" stopProcessing="true">
      <match url="^sitemap.*" />
      <action type="Rewrite" url="http://sitemap.mysitedomain/provider?key={R:0}" logRewrittenUrl="true" />
</rule>

Все выглядит хорошо, но это не работает. Единственный ответ, который я получил, - 404. Я должен отметить, что модуль ARR активен и правильно обрабатывает другие запросы прокси.

Для прозрачности этого правила представьте, что какой-то запрос веб-робота http://mysitedomain/sitemap.xml и реальный запрос будут обслуживаться с http://sitemap.mysitedomain/provider?key=sitemap.xml, где sitemap.mysitedomain размещен на разных серверах и в разных средах.

Странно то, что если я поместил пустой sitemap.xml в корень mysitedomain, все мои запросы к sitemap.xml начнут работать как положено, и я начал получать обновленный sitemap.xml из сервиса sitemap и пустой, который Я поместил в корень сайта.


Добавлена ​​информация о трассировке из неудавшегося запроса

Для неудавшихся запросов у меня есть следующий в файле трассировки

...
ModuleName    RewriteModule

HeaderName    X-Original-URL 
HeaderValue   /sitemap.xml 
Replace       true 

OldUrl       /sitemap.xml 
NewUrl       http://sitemap.mysitedomain/v1/sitemap/provider?key=sitemap.xml

...

ModuleName            ApplicationRequestRouting 
Notification          MAP_REQUEST_HANDLER 
fIsPostNotification   false 
...
OldUrl                http://sitemap.laf24.ru/v1/sitemap/provider?key=sitemap.xml 
NewUrl                /sitemap.xml 

...

ModuleName            ManagedPipelineHandler 
Notification          EXECUTE_REQUEST_HANDLER 
HttpStatus            404 
HttpReason            Not Found 
HttpSubStatus         0 
ErrorCode             The operation completed successfully. (0x0) 

Я должен еще раз указать, что если я помещу пустой файл sitemap.xml в корень mysitedomain, тогда все начнут работать как положено. Я получил реальные данные с sitemap.mysitedomain.

1 Ответ

0 голосов
/ 10 октября 2018

Я нашел, почему это происходит, и это не проблема с модулями Url Rewrite или ARR. Основная причина в том, что ASP.Net обрабатывает такие запросы и возвращает 404, потому что нет маршрутов, определенных для обработки таких путей.

Чтобы исправить это, мы добавили игнорирование определений для URL-адресов файлов Sitemap

routes.IgnoreRoute("sitemap.xml");
routes.IgnoreRoute("sitemap/{*pathInfo}");
...