IIS7: HTTP-> HTTPS чисто - PullRequest
       29

IIS7: HTTP-> HTTPS чисто

144 голосов
/ 05 сентября 2008

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

Ответы [ 6 ]

177 голосов
/ 30 сентября 2011

Я думаю, что самый чистый способ описан здесь на 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>
13 голосов
/ 14 июля 2016

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

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

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

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

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

5 голосов
/ 30 июля 2009

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

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

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

OpsanBlog имеет сценарий ASP и инструкции , которые хорошо работают с IIS6.

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

  • Во-первых, вам нужно установить ASP как функция роли веб-сервера.
  • Во-вторых, использование виртуального каталога не работать как ожидалось в IIS7, и я не сделал попробуйте отладить это. Вместо этого я положил файл в корневую папку сайта и использовал URL /SSLRedirect.asp в Страница ошибки 403.4 для ссылки на нее.
  • Наконец, самая сложная часть: вы НЕ должны применять SSL для SSLRedirect.asp . В противном случае вы получите ошибку 403,4. Для этого вы выбираете файл в «Представлении содержимого» IIS7 и переключаетесь в «Представление функций», чтобы можно было редактировать настройки SSL для отдельного файла и снять флажок «Требовать SSL».

Диспетчер IIS должен показывать имя файла в шапке.

0 голосов
/ 11 декабря 2018

Я использую классический 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 голосов
/ 31 мая 2017

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:"));
}
0 голосов
/ 05 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...