Есть ли чистый способ перенаправить все попытки перехода на HTTP: // версию сайта на его HTTPS: // эквивалент?
Есть ли чистый способ перенаправить все попытки перехода на 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 позволяет легко что-то пропустить.
Диспетчер 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. Таким образом, по сути, это чистое перенаправление на защищенную страницу.