2015-05-27 2 views
4

Здесь много вопросов о перенаправлении http на https, поэтому я решил, что было бы легко изменить процесс. Однако все, что я пробовал, не сработало.Правила перезаписи IIS для перенаправления https на http не работают

Я пытаюсь совместить правило с моим каноническим правилом имени хоста (это первое правило, в верхней части правил перезаписи):

<rule name="CanonicalHostName" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions logicalGrouping="MatchAny"> 
    <add input="{HTTPS}" pattern="^ON$" /> 
    <add input="{HTTP_HOST}" negate="true" pattern="^www\.example\.com|example-staging\.azurewebsites\.net$" /> 
    </conditions> 
    <action type="Redirect" url="http://www.example.com/{R:1}" redirectType="Permanent" /> 
</rule> 

Сайт размещен на Azure и DNS является с CloudFlare, если это имеет значение, я уверен, что этого не должно быть.

Любые идеи, что я делаю неправильно/могут препятствовать работе https на http часть правила? (Имя хоста часть работает отлично)

+0

Это приложение MVC? Возможно, у вас есть 'RequireHttpsAttribute' либо в глобальных фильтрах, либо на самом контроллере? – bgs264

+0

Да, это веб-приложение MVC, но нигде не требуется RequireHttpsAttribute. – Gavin

ответ

5

CloudFlare

Кажется, причина, по которой вы не можете перенаправлять прочь от SSL, является becau se вы используете CloudFlare. CloudFlare как минимум использует гибкий SSL. Это означает, что конечный пользователь, браузер показывает блокировку SSL, но вашему серверу не требуется SSL. См. Документацию здесь: https://www.cloudflare.com/ssl

Без CloudFlare должен работать следующий пример.

Нет CloudFlare

Следующее правило должно работать. Вы можете добавить свой минус, если хотите.

<rule name="HTTPS to HTTP redirect" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTPS}" pattern="on" ignoreCase="true" /> 
    </conditions> 
    <action type="Redirect" redirectType="Found" url="http://{HTTP_HOST}/{R:1}" /> 
</rule> 

Полный раздел переписан для моего рабочего демо-сайта.

<rewrite> 
    <rules> 
     <rule name="CanonicalHostNameRule1"> 
      <match url="(.*)" /> 
      <conditions> 
       <add input="{HTTP_HOST}" pattern="^www\.ashleymedway\.com$" negate="true" /> 
      </conditions> 
      <action type="Redirect" url="http://www.ashleymedway.com/{R:1}" /> 
     </rule> 
     <rule name="HTTPS to HTTP redirect" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions> 
       <add input="{HTTPS}" pattern="on" /> 
      </conditions> 
      <action type="Redirect" url="http://{HTTP_HOST}/{R:1}" redirectType="Found" /> 
     </rule> 
    </rules> 
</rewrite> 
+0

Боюсь, что это не сработало. Очень странно. – Gavin

+0

@Gavin Нечетное, у вас должно быть что-то мешающее вашей установке, я добавил правило из своего ответа на https://www.ashleymedway.com, и вы можете видеть, что правило работает здесь. –

+0

спасибо за полный пример и за другим. Теперь мои правила в основном идентичны вашим. Еще одна проблема. Мой сайт www.topomap.co.nz - если вы попробуете preview.topomap.co.nz, тогда работает каноническое правило, но https никогда не будет. Интересно, может ли это быть чем-то связанным с Azure или CloudFlare? Очень странно! – Gavin

-1

Ваш перенаправлением еще HTTP:

url="http://www.example.com/{R:1}" 

Вы можете выполнить следующие инструкции: Click Here

Дополнительная информация: Here

+1

Это правильно - я хочу заставить http, а не https. Или я чего-то не хватает? – Gavin