Правило перезаписи IIS - игнорировать для localhost - PullRequest
0 голосов
/ 04 июня 2018

У меня есть следующее правило, которое хорошо работает для перенаправления моих запросов www в корень.

Однако я не могу отключить его для localhost.Вот что у меня сейчас:

    <rule name="CanonicalHostNameRule1">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" />
      </conditions>
      <action type="Redirect" url="https://example.com/{R:1}" />
    </rule>

Я пробовал много вещей, включая такие, как:

    <rule name="CanonicalHostNameRule1">
      <match url="(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^localhost$" negate="true" />
        <add input="{HTTP_HOST}" pattern="^example\.com$" negate="true" />
      </conditions>
      <action type="Redirect" url="https://example.com/{R:1}" />
    </rule>

Не могли бы вы помочь?Увы, моя слабость - увы

Ответы [ 2 ]

0 голосов
/ 07 июня 2018

Я бы не смешивал правила разных хостинговых сред;localhost (для локального развития) и www, ваша живая среда.Если вы храните их отдельно, вам не нужно включать и отключать правила в зависимости от среды.

Раздел rules имеет атрибут configSource, с помощью которого вы можете указать на другой отдельный файл, например,RewriteRules.config.При этом web.config будет выглядеть здесь ниже.

<configuration>
    <!-- Other settings go here. -->

    <system.webServer>
        <!-- other settings go here --->

        <rewrite>
            <rules configSource="RewriteRules.config">
        </rewrite>
    </system.webServer>   
</configuration>

Файл RewriteRules.config содержит правила.

<rules>
    <rule name="CanonicalHostNameRule1">
        <!-- Rule details go here -->
    </rule>
</rules>

Вы делаете отдельную версию этого файла RewriteRules.configдля среды, содержащей только соответствующие правила, и разверните ее на соответствующем веб-сервере.

Это имеет много преимуществ.

  • Оцениваются только правила для соответствующей среды, что лучше для производительности.
  • Это более гибко, если у вас естьдругие среды, такие как QA (http://qa. ...) и dev (http://dev. ...).
  • Вам не нужно беспокоиться (и проверять), соответствуют ли правилаодна среда будет мешать другой, здесь: локальная или живая.

Развертывание файла RewriteRules.config может быть включено в автоматизацию развертывания.

0 голосов
/ 07 июня 2018

Как насчет использования условия для сопоставления только запросов, начинающихся с www., вместо попытки отменить, когда вы не хотите применять правило?Это избавляет от необходимости отменять localhost, поскольку localhost никогда не соответствует условиям:

<rule name="Strip WWW" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
        <add input="{HTTP_HOST}" pattern="^www\.(.*)" />
    </conditions>
    <action type="Redirect" url="https://{C:1}/{URL}" />
</rule>

Однако ваш пример правила, которое вы пробовали (ваш второй блок кода), также работает для меня при тестировании сIIS на виртуальной машине Windows 10.Я могу перейти к localhost без перенаправления.Возможно, здесь есть еще одна проблема.

...