Я использую IIS 10 на Windows Server 2019 с установленным на нем WordPress (среди прочего) с установленным URL Rewrite 2.1. IIS правильно настроен для приложения Wordpress, которое само по себе работает нормально.
Я пытаюсь определить правила перезаписи URL-адресов из корневого каталога сервера, которые будут отправлять определенные запросы в приложение WordPress.
Если я перейду к https://this.is.my.server.com/wp/this-is-a-test/, страница загружается нормально.
Я определяю карту перезаписи, которая включает запись для отправки /this-is-a-test на /wp/this-is-a-test/, и создаю правило перезаписи, которое использует эту карту для перенаправления запросов, она работает нормально - исходный URL-адрес возвращает статус HTTP 301, и запрос пересылается ожидаемому URL-адрес. Вот правило:
<rule name = "Rewrite rule1 for RewriteFriendlyUrlsToBlog" enabled = "true" stopProcessing = "true">
<match url = ".*" />
<conditions>
<add input = "{RewriteFriendlyUrls:{REQUEST_URI}}" pattern = "(.+)" />
</conditions>
<action type = "Redirect" url = "{C:1}" appendQueryString = "true" logRewrittenUrl = "true" />
</rule>
Однако мне нужно правило перезаписи, а не перенаправление. Если я вместо этого отредактирую это правило и перепишу его, я получу ошибку 404. Скорректированное правило точно такое же, как и предыдущее, за исключением того, что оно переписывает вместо перенаправления:
<rule name = "Rewrite rule1 for RewriteFriendlyUrlsToBlog" enabled = "true" stopProcessing = "false">
<match url = ".*" />
<conditions>
<add input = "{RewriteFriendlyUrls:{REQUEST_URI}}" pattern = "(.+)" />
</conditions>
<action type = "Rewrite" url = "{C:1}" appendQueryString = "true" logRewrittenUrl = "true" />
</rule>
Подробная информация об ошибке включает в себя:
Requested URL: https://this.is.my.server.com/wp/this-is-a-test/
... что подсказывает мне две вещи:
index.php, по какой-то причине не выполняется.Но я не знаю, что нужно сделать, чтобы это правило перезаписи работало правильно.

Методом проб и ошибок я обнаружил, что для того, чтобы перезапись прошла правильно, мне нужно переписать на index.php, убедившись, что установлен флажок «Добавить строку запроса», а не на ожидаемый URL-адрес.
Кажется, это работает:
<rule name = "TEST single URL rewrite to PHP" enabled = "false" patternSyntax = "ECMAScript" stopProcessing = "false">
<match url = "^this-is-a-test" />
<conditions logicalGrouping = "MatchAll" trackAllCaptures = "false" />
<action type = "Rewrite" url = "/wp/index.php" />
</rule>
Также работает с использованием карты перезаписи.
Мне кажется, что при перезаписи правило в папке WordPress, которое перезаписывает запросы, которые не являются ни файлами, ни папками, в index.php, не обрабатывается, независимо от того, какое значение установлено у вас в опции «stopProcessing».
Попробуйте использовать FRT для отслеживания правил перезаписи, вы увидите, как правила используются внутри. Learn.microsoft.com/en-us/iis/extensions/url-rewrite-module/…