2008-09-05 6 views
137

Есть ли способ перенаправить все попытки перехода на HTTP: // версию сайта на свой HTTPS: // эквивалент?IIS7: HTTP-> HTTPS Clean

+0

Ответ можно найти на блоге Джеймса Ковача: http://jameskovacs.com/2007/05/09/how-to-autoredirect-to-a-sslsecured-site- in-iis/ – cpuguru 2011-03-08 19:33:45

+0

Если вы находитесь на IIS 7 и на R2 [здесь] (http://www.jppinto.com/2010/03/automatically-redirect-http-requests-to-https-on-iis7-using- url-rewrite-2-0 /) - это руководство, которое работает и самое «чистое» – 2012-09-21 15:37:08

ответ

173

Я думаю, что самый чистый способ, как описано here on IIS-aid.com. Это только web.config, и поэтому, если вы меняете сервер, вам не нужно помнить все шаги, которые вы выполнили с помощью настраиваемой страницы ошибки 403.4 или других специальных разрешений, она просто работает.

<configuration> 
    <system.webServer> 
    <rewrite> 
     <rules> 
     <rule name="HTTP to HTTPS redirect" stopProcessing="true"> 
      <match url="(.*)" /> 
      <conditions> 
       <add input="{HTTPS}" pattern="off" ignoreCase="true" /> 
      </conditions> 
      <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" /> 
     </rule> 
     </rules> 
    </rewrite> 
    </system.webServer> 
</configuration> 
+4

Это прекрасно работает, и для бонусных очков он полностью автономный, поэтому вам не нужно создавать новый веб-сайт, как указано в принятом ответе – WickyNilliams 2012-06-28 10:42:36

+1

Будет ли этот огонь для всех URL-адресов независимо от типа файла. например Прямой URL-адрес файла txt? – Cheekysoft 2013-08-27 16:27:09

-4

Я думаю, что «чисто» вы имеете в виду как с перенаправлением 300. Конфигурация для большого количества серверов & Языки here.

5

Чистый способ изменяет только схему URL из http -> https и оставляет все остальное эквивалентным. Он должен быть серверным, чтобы не было проблем с браузером.

В JPPinto.com есть Step-By-Step instructions о том, как это делается, за исключением того, что они используют javascript (HttpRedirect.htm) вместо перенаправления на стороне сервера. По какой-то причине я не мог заставить IE запускать javascript, если вы включили «Показать дружественные сообщения об ошибках HTTP», который включен по умолчанию. Другое дело в сценарии заключается в том, что перенаправление на путь не работает даже в FF или Chrome. Сценарий всегда перенаправляется на root. (Возможно, я что-то пропустил, потому что он должен перенаправляться на путь.)

По этим причинам я использовал страницу ASP для перенаправления. Недостатком, конечно же, является то, что для этого на сервере должен быть включен классический ASP.

OpsanBlog имеет ASP script and instructions, который хорошо работает с IIS6.

У меня было несколько вопросов, используя этот метод с IIS7. В основном проблемы с пользовательским интерфейсом, так как IIS7 позволяет пропустить что-то.

  • Во-первых, вам необходимо установить ASP как функцию роли веб-сервера .
  • Во-вторых, с помощью виртуального каталога не было Работайте, как ожидалось, в IIS7, и я не сделал . Попробуйте отладить это. Вместо этого я помещаю файл в корневую папку сайта и использовал url '/SSLRedirect.asp' на странице ошибок 403.4, чтобы ссылаться на него.
  • Последняя, ​​самая сложная часть, вы не должны применять SSL для SSLRedirect.asp. В противном случае вы получите ошибку 403.4. Для этого вы выбираете файл в IIS7 «Просмотр содержимого» и переключаетесь на «Вид функций», чтобы вы могли редактировать настройки SSL для одного файла и отключать флажок «Требовать SSL».

Менеджер IIS должен показать имя файла в заголовке.

+1

Связанные инструкции на JPPinto.com были обновлены, чтобы подчеркнуть, что это не работает на IIS 7.5 или R2. Говорят, что вы получите нарушение блокировки из-за изменений в безопасности в новых версиях IIS. Вместо этого они предлагают использовать метод URL Rewrite 2.0 (аналогичный подход в соответствии с ответом от @toxaq). – AussieRob 2016-02-15 04:22:35

9

Самый простой и чистый решение, которое я нашел было

  1. В настройках SSL -> требуют SSL

  2. В Страницы ошибок -> Об 403.4 ошибки -> Перенаправление на HTTPS сайт

  3. В Страницах ошибок -> Изменить настройки параметров ...-> Установить подробные ошибки для локальных запросов и страницы пользовательских ошибок для удаленного запроса

Преимущество в том, что для этого не требуется никаких дополнительных строк кода. Недостатком является то, что он перенаправляет вас на абсолютный URL-адрес.

0

Global.asax

protected void Application_BeginRequest() 
{ 
if (!Context.Request.Url.AbsoluteUri.Contains("localhost") && !Context.Request.IsSecureConnection) 
Response.Redirect(Context.Request.Url.ToString().Replace("http:", "https:")); 
}