IIS UrlRewrite для обратного прокси-сервера работает только в том случае, если папка существует на основном веб-сайте - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть два веб-сайта на одной коробке, и я хочу поменять прокси папку на одном. Это работает только для каталогов, если я создаю каталог на родительском веб-сайте.

, поэтому я хочу http://site/odata/Books

до go до http://myodatasite/odata/Books

Довольно просто , но это не работает, если я go до wwwroot/site и не создаю там папки / odata / Books. Если я сделаю это, переписать работает. Если я вызову / odata / Authors, снова произойдет 404, если я не создам папку Authors.

Похоже, мне нужно иметь сопоставление wilcard в IIS, или что-то еще вызывает сбой перезаписи. Я попытался добавить подстановочный знак, указывающий на aspnet_isapi, и у меня не было изменений, возможно, из-за интегрированного режима, но я пока не нашел ничего полезного в Интернете для этого.

Кто-нибудь знает, почему мое переписывание не работает для каталогов, но перенаправление работает нормально?

<rewrite>
      <rules>
        <!-- Does Not Work unless folders exist on current site! -->
        <rule name="OdataRoutes" stopProcessing="true">
          <match url="^odata/(.*)" />
          <action type="Rewrite" url="http://myodatasite/odata/{R:1}" />
        </rule>
        <!-- Works -->
        <rule name="OdataRoutes2" stopProcessing="true">
          <match url="odata2/(.*)" />
          <action type="Redirect" url="http://myodatasite/odata/{R:1}" />
        </rule>
        <!-- Works -->
        <rule name="OdataRoutes3" stopProcessing="true">
          <match url="(.*)\.odata" />
          <action type="Rewrite" url="http://myodatasite/odata/{R:1}" />
        </rule>
</rewrite>

1 Ответ

0 голосов
/ 17 апреля 2020

Похоже, это не было отображений вообще. При включении отслеживания невыполненных запросов и отслеживания успешного запроса и неудавшегося запроса, казалось, что перезапись каталога передавалась из ARR в MvcHandler. Не уверен, почему не было перенаправления и переписывания, но, увидев это, исправить было довольно просто.

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