2013-06-06 2 views
2

В настоящее время мы пытаемся настроить перенаправление с htttp на https в нашем web.config, ограниченном доменами, которые мы используем. Но это не работает.правило перезаписи не перенаправляет http на https

<rewrite> 
     <rules> 
      <rule name="HTTP to HTTPS redirect" stopProcessing="true"> 
       <match url="^(?:http(?:s)?:\/\/)?(?:[^\\.]+\.)?mysite\.com(\/.*)?$" /> 
       <conditions> 
        <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
       </conditions> 
       <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> 
      </rule> 
     </rules> 
    </rewrite> 

Это правило отлично работает в редакторе регулярных выражений. Но не на веб-сервере. http://rubular.com/r/3NQTozcigZ

^(?:http(?:s)?:\/\/)?(?:[^\\.]+\.)?mysite\.com(\/.*)?$ 

Глядя на pattern_match failedreqlogfiles ложна. Какие-нибудь идеи?

После выполнения еще нескольких тестов я нахожу, что это работает.

http://sub.site.com/ 

Но это не сработает.

http://sub.site.com/Account/Logon 
+0

вроде нормально, попытались изменить правило из модуля перезаписи URL-адрес IIS? Это нормально? –

+0

Я думаю, что это что-то особенное для перезаписи мод. (.*) работает отлично. но другое регулярное выражение не будет работать – Prescient

ответ

1

Образец, используемый в url, предназначен только для повторного запроса запрошенного пути (и только путь, а не URL).

Если вы хотите, чтобы проверить домен, а также, если HTTPS используется или нет, вы должны полагаться на условиях:

<rule name="Redirect mysite.com to HTTPS" stopProcessing="true"> 
    <match url=".*" /> 
    <conditions logicalGrouping="MatchAll"> 
    <add input="{HTTPS}" pattern="^OFF$" /> 
    <add input="{HTTP_HOST}" pattern="mysite\.com$" /> 
    </conditions> 
    <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" /> 
</rule> 

Это правило будет проверять, что оба условия (это то, что logicalGrouping="MatchAll" здесь для) по любому пути (.*):

  • запрос не был использование HTTPS
  • домена запрошенных концов с mysite.com

Для справки: http://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Accessing_URL_Parts_from_a_Rewrite_Rule

+0

Будет ли это работать с субдоменами? – Prescient

+0

Это должно быть потому, что шаблон, используемый для проверки '{HTTP_HOST}', просто подтверждает, что он заканчивается 'mysite.com'. Так, например, 'www.mysite.com' и' blog.mysite.com' будут действительны. – cheesemacfly

+0

Когда я пишу концы, я имею в виду концы, если их легче понять! – cheesemacfly

1

Нужно ли регулярное выражение? Если вы просто перенаправляет весь трафик HTTPS, что-то, как это должно работать:

<rule name="HTTP to HTTPS redirect" stopProcessing="true"> 
    <conditions> 
     <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
    </conditions> 

    <action 
     type="Redirect" 
     redirectType="Permanent" 
     url="https://{HTTP_HOST}{REQUEST_URI}" 
     appendQueryString="false" 
    /> 
</rule> 

я был бы склонен использовать redirectType="Permanent" вместо "Found", так как HTTP 301 ответ, как правило, лучше для SEO.

Если вы постоянно перемещаете свой сайт на HTTPS, вы также можете посмотреть на отправку the Strict-Transport-Security header. Это гарантирует, что современные браузеры никогда не запрашивают ваш сайт по незащищенному соединению.

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