IIS7: HTTP-> HTTPS чисто


146

Чи є чистий спосіб перенаправити всі спроби переходу на HTTP: // версію сайту на його HTTPS: // еквівалент?


Відповідь можна знайти у блозі Джеймса Ковача: 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>

9
Це працювало для мене за винятком того, що мені довелося змінити URL-адресу для переадресації на https: // {HTTP_HOST} {REQUEST_URI}
Andrew S

6
Це теж працювало для мене. Мені довелося додати додаток, під яким я працював під ... localhost / app1 => http: // {HTTP_HOST} / app1 / {R: 1}
RealSollyM

15
Для тих, хто ще не має розділу переписати, розмістіть правила у наступних розділах web.config: <system.webServer><rewrite> <rules> ... </rules> </rewrite> </ system .webServer>
raider33

16
переконайтесь, що модуль перезапису Microsoft Microsoft встановлений на сервері IIS
Іман

7
З причин SEO вам слід використовувати redirectType = "Постійний". Перегляньте support.google.com/webmasters/answer/…
Niels Bosma

14

Найпростішим і найчистішим рішенням я був

  1. У налаштуваннях SSL -> вимагати SSL

  2. У Сторінках помилок -> На помилці 403.4 -> Перенаправлення на сайт HTTPS

  3. В Сторінках помилок -> Редагувати параметри функцій ... -> Встановити докладні помилки для локальних запитів та користувацьких сторінок помилок для віддаленого запиту

Перевага полягає в тому, що він не потребує додаткових рядків коду. Недоліком є ​​те, що воно перенаправляє вас до абсолютного URL-адреси.


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, і я не намагався це налагодити. Натомість я помістив файл у кореневу папку сайту та використав URL-адресу "/SSLRedirect.asp" на сторінці помилки 403.4.
  • Останнє, найсміливіша частина, НЕ МОЖЕ застосовувати SSL для SSLRedirect.asp . Інакше ви отримаєте помилку 403.4. Для цього виберіть файл у розділі "Перегляд вмісту" IIS7 та переключитесь на "Перегляд функцій", щоб ви могли змінити налаштування SSL для одного файлу та зняти прапорець "Потрібно SSL".

IIS-менеджер повинен показати ім'я файлу у заголовку.


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 (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. Тож фактично це чисте переспрямування на захищену сторінку.


-4

Я думаю, що "чисто" ви маєте на увазі, як з переадресацією 300. Config для багатьох серверів і мов тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.