Есть ли чистый способ перенаправить все попытки перехода с HTTP: // версии сайта на его HTTPS: // эквивалент?
IIS7: HTTP- ›HTTPS Чисто
Ответы (6)
Я думаю, что самый чистый способ описан здесь, на 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>
ERR_TOO_MANY_REDIRECTS
в Chrome.
- person vaindil; 10.01.2016
Web.config
файле в корне вашего веб-сайта.
- person nebffa; 29.09.2016
Самым простым и понятным решением, которое я нашел, было
В настройках 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 «Content View» и переключаетесь на «Features View», чтобы вы могли редактировать настройки 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. Настройте множество серверов и языков здесь.