Подтвердить что ты не робот

Переписать правило на HTTPS, кроме случаев, когда на localhost

Я использую ответ здесь в качестве основы для попытки добавить правило перезаписи в мой файл web.config. Я хочу, чтобы он соответствовал любому URL-адресу, который не работает на localhost, чтобы заставить https.

Вот что я имею прямо сейчас:

<system.webServer>
  <rewrite> <!-- force https - /info/202122/requirehttps-and-routing-to-https-url/1098884#1098884 -->
    <rules>
      <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
        <match url="^((?!localhost).)*$"/>
        <conditions>
          <add input="{HTTPS}" pattern="^OFF$"/>
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>
      </rule>
    </rules>
  </rewrite>
</system.webServer>

Я пытаюсь использовать негативный обратный путь, чтобы соответствовать только URL-адресу, который не содержит "localhost" в URL-адресе. Но это не работает.

Итак, как это правило должно быть настроено для того, чтобы переписывать URL-адрес не-localhost?

4b9b3361

Ответ 1

Попробуйте следующее условие:

<system.webServer>
  <rewrite>
    <rules>
      <rule name="Redirect HTTP to HTTPS" stopProcessing="true">
        <match url="^(.*)$"/>
        <conditions>
          <add input="{HTTPS}" pattern="^OFF$"/>
          <add input="{HTTP_HOST}" matchType="Pattern" pattern="^localhost$" negate="true" /> 
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther"/>
      </rule>
    </rules>
  </rewrite>
</system.webServer>

Использование условия negate для шаблона localhost должно выполнить трюк.

Ответ 2

Добавив в anubhava ответ, вы можете заменить элемент add для localhost следующими двумя записями, чтобы обслуживать как localhost, так и 127.0.0.1 с дополнительными портами, например localhost: 59400, что происходит при отладке через visual studio и IIS

<add input="{HTTP_HOST}" matchType="Pattern" pattern="^localhost(:\d+)?$" negate="true" />
<add input="{HTTP_HOST}" matchType="Pattern" pattern="^127\.0\.0\.1(:\d+)?$" negate="true" />    

С исходным ответом localhost: 123 будет перенаправлен на https, что может быть нежелательно.