У меня проблема с некоторым пониманием того, как 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.