#url-rewriting #biztalk #iis-10
Вопрос:
Я пытаюсь использовать перезапись URL-адреса IIS для перезаписи:
http://localhost/RESTDemo/Service1.svc/Persons
Для http://localhost/RESTDemo/api/Persons
У меня есть следующая конфигурация в моем Web.config:
<system.webServer>
<rewrite>
<rules>
<rule name="Change 'Service1.svc' to 'api'" stopProcessing="true">
<match url="^(.*)/RESTDemo/api/(.*)$" />
<action type="Rewrite" url="{R:1}/RESTDemo/Service1.svc/{R:2}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
И когда я запускаю тестовый шаблон в IIS, он, кажется, работает
Но когда я тестирую СООБЩЕНИЕ http://localhost/RESTDemo/api/Persons
, я получаю 404.0, не найденное в IIS. Затем, когда я пытаюсь запустить тот же ПОСТ, http://localhost/RESTDemo/Service1.svc/Persons
он работает.
Я попытался проверить журнал в разделе C:inetpublogsLogFilesW3SVC1
, но не вижу ничего полезного, хотя я установил logRewrittenUrl="true"
, что могу видеть это только в своем журнале IIS:
2021-04-20 10:18:48 127.0.0.1 POST /RESTDemo/api/persons - 80 - 127.0.0.1 Apache-HttpClient/4.5.5 (Java/12.0.1) - 404 0 2 1
Мои вопросы таковы..
- Что я делаю не так?
- Почему я не могу увидеть переписанный URL-адрес в своем файле журнала?
Комментарии:
1. Начните с ошибки 1 blog.lextudio.com/…
Ответ №1:
Это связано с тем, что есть проблема с вашими правилами перезаписи, вы можете попробовать следующие правила перезаписи:
<system.webServer>
<rewrite>
<rules>
<rule name="Change 'Service1.svc' to 'api'" stopProcessing="true">
<match url="^(RESTDemo)/api/(.*)$" />
<action type="Rewrite" url="RESTDemo/Service1.svc/{R:2}" logRewrittenUrl="true" />
</rule>
</rules>
</rewrite>
</system.webServer>
Вот моя демо-версия: