Есть ли чистый способ перенаправить все попытки перехода на 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, которые включены по умолчанию. Другое дело с script заключается в том, что перенаправление к пути не работает даже в FF или Chrome. script всегда перенаправляется на root. (Возможно, я что-то пропустил, потому что он должен перенаправляться на путь.)
По этим причинам я использовал страницу ASP для перенаправления. Недостатком, конечно же, является то, что для этого на сервере должен быть включен классический ASP.
OpsanBlog имеет ASP script и инструкции, которые хорошо работают с IIS6.
У меня было несколько проблем с использованием этого метода с IIS7. В основном проблемы с пользовательским интерфейсом, так как IIS7 позволяет пропустить что-то.
Менеджер IIS должен показать имя файла в заголовке.
Я использую классический 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. Так что в действительности это чистый перенаправление на защищенную страницу.
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:"));
}
Я думаю, что "чисто" вы имеете в виду как с перенаправлением 300. Конфигурация для большого количества серверов и языков здесь.