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