IIS7: HTTP-> HTTPS чисто

137

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

  • 0
    Ответ можно найти в блоге Джеймса Ковача: jameskovacs.com/2007/05/09/…
  • 0
    Если вы используете IIS 7 и R2, вот руководство, которое работает и наиболее «чисто»
Теги:
https
iis-7

6 ответов

170
Лучший ответ

Я думаю, что самый чистый способ, как описано здесь, на 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="Permanent" url="https://{HTTP_HOST}/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>
  • 4
    Это работает отлично, и для бонусных баллов это полностью автономно, поэтому вам не нужно создавать новый сайт, как указано в принятом ответе
  • 1
    Будет ли это срабатывать для всех URL независимо от типа файла. Например, прямой URL к текстовому файлу?
Показать ещё 10 комментариев
13

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

  • В настройках SSL → требуется SSL

  • В страницах ошибок → Ошибка 403.4 → Перенаправление на сайт HTTPS

  • На страницах ошибок → Изменить настройки параметров... → Установить подробные ошибки для локальных запросов и настраиваемых страниц ошибок для удаленного запроса

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

  • 1
    работает отлично (на IIS 8.5 / 2012 R2). и не возиться с web.config
  • 1
    это умный способ решить проблему. Спасибо
Показать ещё 2 комментария
5

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

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

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

OpsanBlog имеет ASP script и инструкции, которые хорошо работают с 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).
0

Я использую классический asp (интранет), и на страницах, где требуется вход в систему, входящий файл входа в систему выполняет перенаправление:

if Request.ServerVariables("SERVER_PORT_SECURE") <> "1" or Request.ServerVariables("HTTPS") <> "on" then 
    Response.Redirect "https://" & Request.ServerVariables("SERVER_NAME") & Request.ServerVariables("URL")
end if

Это, конечно, не включает в себя данные GET или POST. Так что в действительности это чистый перенаправление на защищенную страницу.

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:"));
}
  • 1
    Я могу легко обойти это перенаправление, поместив localhost где-то в URI, например строку запроса yourdomain.com?localhost=true. Я бы предложил вместо этого проверить свойство Request.Url.Host.
-4

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню