Чи є чистий спосіб перенаправити всі спроби переходу на 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 (intranet), а на сторінках, які потребують входу, вхідний файл включає в себе файл робить переспрямування:
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. Тож фактично це чисте переспрямування на захищену сторінку.