IIS7: HTTP-> HTTPS Чисто

146

Есть ли чистый способ перенаправить все попытки перехода на HTTP: // версию сайта на его HTTPS: // эквивалент?

cpuguru
источник
Ответ можно найти в блоге Джеймса Ковача: jameskovacs.com/2007/05/09/…
cpuguru
Если вы используете IIS 7 и R2, вот руководство, которое работает и наиболее «чисто»
Ujwal Parker

Ответы:

177

Я думаю, что самый чистый способ, как описано здесь, на 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>
toxaq
источник
9
Это сработало для меня за исключением того, что мне пришлось изменить URL-адрес перенаправления на https: // {HTTP_HOST} {REQUEST_URI}
Эндрю С
6
Это также сработало для меня. Мне пришлось добавить приложение, в котором я работал ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM
15
Для тех, у кого еще нет раздела для перезаписи, поместите правила в следующие разделы файла web.config: <system.webServer> <rewrite> <rules> ... </ rules> </ rewrite> </ system .webServer>
raider33
16
убедитесь, что модуль Microsoft URL Rewrite установлен на сервере IIS
Iman
7
По причинам SEO вы должны использовать redirectType = "Permanent". Обзор support.google.com/webmasters/answer/...
Нильс Bosma
14

Самым простым и чистым решением, которое я нашел, было

  1. В настройках SSL -> требуется SSL

  2. На страницах ошибок -> Ошибка 403.4 -> Перенаправление на сайт HTTPS

  3. На страницах ошибок -> Изменить параметры функций ... -> Установить подробные ошибки для локальных запросов и настраиваемые страницы ошибок для удаленного запроса

Преимущество заключается в том, что он не требует дополнительных строк кода. Недостатком является то, что он перенаправляет вас на абсолютный URL.

ColacX
источник
1
работает отлично (на IIS 8.5 / 2012 R2). и не возиться с web.config
schmendrick
Не могли бы вы привести пример этого недостатка? При каких обстоятельствах это произойдет и почему это негативно? Если бы вы могли добавить это к своему ответу, это было бы здорово. Большое спасибо!
Маркос Димитрио
2
@MarcosDimitrio Я не уверен, так как это было так давно. но я полагаю, когда я имел в виду, что он перенаправляет вас на абсолютный URL, я имел в виду «базовый URL». Например, «http»: //mywebsite.com/hellokitty будет перенаправлен на «https»: //mywebsite.com, что приведет к потере некоторой информации о пути, что приведет к разрыву каждой существующей ссылки с дополнительной информацией о пути.
ColacX
5

Чистый способ изменяет только схему URL с http -> https и оставляет все остальное эквивалентным. Он должен быть на стороне сервера, чтобы не было проблем с браузером.

JPPinto.com имеет пошаговые инструкции о том, как это делается, за исключением того, что они используют javascript (HttpRedirect.htm) вместо перенаправления на стороне сервера. По какой-то причине я не смог заставить IE запустить javascript, если у вас включен параметр «Показывать дружественные сообщения об ошибках HTTP», который включен по умолчанию. Еще одна особенность сценария - перенаправление на путь не работает даже в FF или Chrome Скрипт всегда перенаправляет в root. (Может быть, я что-то пропустил, потому что это должно перенаправить на путь.)

По этим причинам я использовал страницу ASP для перенаправления. Недостатком, конечно, является то, что для этого требуется, чтобы на сервере был включен классический ASP.

OpsanBlog имеет скрипт ASP и инструкции, которые хорошо работают с IIS6.

У меня было несколько проблем с использованием этого метода с IIS7. В основном проблемы с пользовательским интерфейсом, поскольку IIS7 позволяет легко что-то пропустить.

  • Во-первых, вам нужно установить ASP в качестве функции роли веб-сервера.
  • Во-вторых, использование виртуального каталога не работало должным образом в IIS7, и я не пытался отлаживать это. Вместо этого я поместил файл в корневую папку сайта и использовал ссылку «/SSLRedirect.asp» на странице ошибки 403.4 для ссылки на него.
  • Наконец, самая сложная часть, вы НЕ должны применять SSL для SSLRedirect.asp . В противном случае вы получите ошибку 403,4. Для этого вы выбираете файл в «Представлении содержимого» IIS7 и переключаетесь в «Представление функций», чтобы можно было редактировать настройки SSL для отдельного файла и отключить флажок «Требовать SSL».

Диспетчер IIS должен показывать имя файла в шапке.

Mika
источник
1
Связанные инструкции на JPPinto.com были обновлены, чтобы подчеркнуть, что это не работает на IIS 7.5 или R2. Они говорят, что вы получите нарушение блокировки из-за изменений в безопасности в более новых версиях IIS. Вместо этого они предлагают использовать метод URL Rewrite 2.0 (аналогичный подход, как в ответе @toxaq).
Роберт Шатток
0

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:"));
}
Инструментарий
источник
1
Я легко могу обойти это перенаправление, поместив localhost куда-то в URI, например строку запроса yourdomain.com?localhost=true. Я бы предложил вместо этого проверить свойство Request.Url.Host
Aidy J
0

Я использую классический 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. Таким образом, по сути, это чистое перенаправление на защищенную страницу.

Жан-Марк
источник
-4

Я думаю, что «чисто» вы имеете в виду, как с перенаправлением 300. Конфиг для множества серверов и языков здесь .

slipsec
источник