2014-01-06 2 views
27

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

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

<system.webServer> 
    <rewrite> <!-- force https - https://stackoverflow.com/a/15119044/51 --> 
    <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> 

Я пытаюсь использовать negative lookaround для того, чтобы только матч URL, которые не включают в себя «локальный» в URL. Но это не работает.

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

ответ

42

Попробуйте это условие:

<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 рисунка следует сделать трюк.

+1

Результаты в «Ошибка HTTP 500.50 - Ошибка перезаписи URL-адреса». –

+0

Можете ли вы попробовать обновленное правило с 'negate =" true "? – anubhava

+0

Такая же ошибка. Я подозреваю, что это может быть связано с действием, связанным с группировкой - '{R: 1}' - которое больше не входит в соответствующее регулярное выражение. –

39

Добавление анубхава-х answer, вы можете заменить добавить элемент для локального хоста со следующими 2 записей, чтобы удовлетворить как локальный и 127.0.0.1 с дополнительными портами, например, локальный: 59400, который является случай, когда отладка через визуальные студии и 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, что может быть нежелательно.

+0

этот работал для меня. Ответ anubhava не учитывает localhost: случай XXXX (порт) – sports

+3

это работает для меня, за исключением случаев, когда я перехожу к root ("/"). то по какой-то причине он перенаправляет меня на HTTPS. –

+0

@MikeW Я получаю ту же проблему при навигации к корню. Не знаете, как это исправить. – drewid

Смежные вопросы