Вопрос
Есть ли простой способ перенаправить все попытки перейти на версию сайта HTTP:// на ее эквивалент HTTPS://?
Решение
Я думаю, что самый чистый способ - как описано здесь, на 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>
Другие советы
Самым простым и чистым решением, которое я нашел, было
В настройках SSL -> требовать SSL.
На страницах ошибок -> При ошибке 403.4 -> Перенаправление на сайт HTTPS.
На страницах ошибок -> Изменить настройки функций...-> Установить подробные ошибки для локальных запросов и пользовательские страницы ошибок для удаленных запросов.
Преимущество в том, что он не требует дополнительных строк кода.Обратной стороной является то, что он перенаправляет вас на абсолютный URL-адрес.
Чистый способ меняет только схему 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 должен отображать имя файла в заголовке.
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:"));
}
Я использую классический 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.По сути, это чистое перенаправление на вашу защищенную страницу.
Я думаю, что под «чистым» вы подразумеваете, например, с перенаправлением 300.Конфигурация для множества серверов и языков здесь.