Я изо всех сил пытался понять правила перезаписи в IIS 8.5 и хотел бы получить некоторую помощь. В основном для приложения React мне нужно было бы переписать все URL-адреса для ввода в index.html плюс необязательные параметры запроса.
приложение React должно работать в поддиректоре веб-сервера, так как оно является лишь расширением основного сайта
так, но для ресурсов (папка), статических (папка) и manifest.json (файл) мне не нужно переписывать URL. они упадут в
- www.some-site.com / каталог / дверной селектор / (папки или файлы, а также index.html)
все маршруты также начинаются здесь, см. 2 примера:
- www.some-site.com / каталог / двери / двери селекторные
- www.some-site.com / каталог / селектор дверей / двери / (название двери)
Итак, я придумал следующее: (не работает)
<rule name="Door Selector Door" patternSyntax="ExactMatch">
<match url="^catalog/door-selector/.+" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_URI}" pattern="^~/static/~(.*)" negate="true" />
<add input="{REQUEST_URI}" pattern="^~/assets/~(.*)" negate="true" />
<add input="{REQUEST_URI}" pattern="^~/manifest.json" negate="true" />
</conditions>
<action type="Rewrite" url="catalog/door-selector/index.html" appendQueryString="true"/>
</rule>
С простым переписыванием и без условий я заставляю его работать, но я бы предпочел сделать это только с парой правил.
примечание. Я забыл, что некоторые ресурсы поступают с рабочего сервера. и это было переписывать части URL-адреса!
Окончательное правило установлено на:
<rule name="Door Selector React" enabled="true">
<match url="catalog/door-selector/(.*)" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="catalog/door-selector/index.html" appendQueryString="true"/>
</rule>