IIS7: HTTP- ›HTTPS Чисто

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


person cpuguru    schedule 05.09.2008    source источник
comment
Ответ можно найти в блоге Джеймса Ковача: jameskovacs.com/2007/05/09/   -  person cpuguru    schedule 08.03.2011
comment
Если вы используете IIS 7 и R2 здесь - это руководство, которое работает и является наиболее точным   -  person Ujwal Parker    schedule 21.09.2012


Ответы (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>
person toxaq    schedule 30.09.2011
comment
Это работает отлично, а для бонусных баллов он полностью автономен, поэтому вам не нужно создавать новый веб-сайт, как указано в принятом ответе. - person WickyNilliams; 28.06.2012
comment
Будет ли это срабатывать для всех URL-адресов независимо от типа файла. например Прямой URL-адрес текстового файла? - person Cheekysoft; 27.08.2013
comment
У меня это сработало, за исключением того, что мне пришлось изменить URL-адрес перенаправления на https: // {HTTP_HOST} {REQUEST_URI} - person Andrew S; 25.10.2013
comment
Это тоже сработало для меня. Мне пришлось добавить приложение, в котором я работал ... localhost / app1 = ›http: // {HTTP_HOST} / app1 / {R: 1} - person RealSollyM; 06.05.2014
comment
Для тех, у кого еще нет раздела перезаписи, разместите правила в следующих разделах файла web.config: ‹system.webServer› ‹rewrite› ‹rules› ... ‹/rules› ‹/rewrite› ‹/ system .веб сервер> - person raider33; 04.08.2014
comment
убедитесь, что модуль перезаписи URL-адресов Microsoft установлен на сервере IIS - person Iman; 30.06.2015
comment
По причинам SEO вам следует использовать redirectType = Permanent. Просмотрите support.google.com/webmasters/answer/. - person Niels Bosma; 11.11.2015
comment
У меня это не работает в IIS 8, вызывает ERR_TOO_MANY_REDIRECTS в Chrome. - person vaindil; 10.01.2016
comment
Приведенное выше правило перезаписи решило мою проблему, но только после того, как я впервые зашел в настройки SSL в IIS для этого домена и не снял флажок «Требовать SSL» (хотя был отмечен только параметр «Игнорировать»). - person Harvey Mushman; 21.04.2016
comment
К вашему сведению, это должно быть в Web.config файле в корне вашего веб-сайта. - person nebffa; 29.09.2016
comment
Нужны привязки IIS как для 443, так и для 80 - person Savage; 17.05.2017

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

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

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

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

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

person ColacX    schedule 14.07.2016
comment
работает отлично (на IIS 8.5 / 2012 R2). и не возиться с web.config - person schmendrick; 03.10.2016
comment
Не могли бы вы привести пример этого недостатка? При каких обстоятельствах это могло бы произойти и почему это плохо? Если бы вы могли добавить это к своему ответу, это было бы здорово. Большое спасибо! - person Marcos Dimitrio; 03.03.2017
comment
@MarcosDimitrio Я не уверен, так как это было так давно. но я считаю, что когда я имел в виду, что он перенаправляет вас на абсолютный URL-адрес, я имел в виду базовый URL-адрес. Например, http://mywebsite.com/hellokitty будет перенаправлен на https://mywebsite.com, что приведет к потере некоторой информации о пути, это приведет к разрыву каждой существующей ссылки с дополнительной информацией о пути. - person ColacX; 05.03.2017

Чистый способ изменяет только схему 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 должен отображать имя файла в заголовке.

person mika    schedule 30.07.2009
comment
Связанные инструкции на JPPinto.com были обновлены, чтобы подчеркнуть, что это не работает в IIS 7.5 или R2. Они говорят, что вы получите нарушение блокировки из-за изменений в безопасности в новых версиях IIS. Вместо этого они предлагают использовать метод URL Rewrite 2.0 (аналогичный подход согласно ответу от @toxaq). - person Robert Shattock; 15.02.2016

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

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

person Jean-Marc    schedule 11.12.2018

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

person slipsec    schedule 05.09.2008