Подтвердить что ты не робот

Относительное перенаправление IIS HTTP к HTTPS

Недавно я получил сертификат SSL для своего сайта и хочу перенаправить весь трафик на HTTPS. Я получил все, чтобы перейти на https://mydomain.com, но если кто-то входит в http://mydomain.com/anotherpage, он отбрасывает другую страницу и просто забирает пользователя на домашнюю страницу.

Мое правило в моем web.config файле выглядит так:

<rule name="HTTP to HTTPS redirect" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
  </conditions>
  <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>

Я также пробовал https://{HTTP_HOST}{REQUEST_URI} без каких-либо успехов. Может ли кто-нибудь сказать мне, что мне нужно сделать, чтобы сделать сайт перенаправлен на правильную версию HTTPS на странице? У меня такое чувство, что оно имеет какое-то отношение к шаблону, но я не могу понять синтаксис.

4b9b3361

Ответ 1

Я нашел способ сделать это, и вам не нужен модуль Rewrite для этого.
В Windows 8 (IIS 8.5) у меня работает следующее:

  1. Удалите HTTP-привязку с вашего сайта (оставьте HTTPS на месте)
  2. Добавь другой сайт
  3. Убедитесь, что новый сайт имеет HTTP-привязку
  4. Настройте HTTP Redirect, как показано:

enter image description here

Теперь все HTTP-запросы будут перенаправлены на ваш HTTPS-сайт и сохранят оставшуюся часть URL.

Ответ 2

Измените его на:

<rewrite>
   <rules>
      <rule name="Redirect to HTTPS" stopProcessing="true">
         <match url="(.*)" />
         <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
         </conditions>
         <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
      </rule>
   </rules>
</rewrite>

Ответ 3

Я еще не могу прокомментировать, или я оставил бы это как комментарий в ответ AndyH. Решение было правильным, хотя я ударил еще одну загвоздку (вероятно, связанную с использованием сервера Adobe Coldfusion). Я хотел поделиться некоторыми дополнительными исследованиями, которые я должен был сделать для любой другой несчастной души, которая может столкнуться с этим.

После настройки перенаправление всегда будет заканчиваться на этом URL:

https://xxx.xxx.com/jakarta/isapi_redirect.dll

Исправление для этого было найдено в потоке Adobe (https://forums.adobe.com/thread/1034854): мне пришлось изменить настройки пула приложений следующим образом:

Реальный сайт (только привязка HTTPS, фактически содержит код и виртуальные каталоги) Пул приложений Дополнительные настройки: Enable 32-Bit Applications : False

Сайт Http_Redirect (только привязка HTTP, является пустой оболочкой папки без каталогов) Пул приложений Дополнительные настройки: Enable 32-Bit Applications : True


EDIT: Еще одна деталь, привязанная к сохранению строки запроса:

В предположении в этом посте (http://www.developerfusion.com/code/4678/permanent-301-redirect-with-querystring-in-iis/)

Добавьте $S$Q в конец домена и убедитесь, что установлен флажок для Redirect all requests to exact destination. Затем он также сохранит строку запроса.

Ответ 4

У меня была та же проблема, когда R:1 сбрасывал мои папки. Я исправил это так.

<rule name="http to https" stopProcessing="true">
    <match url="(.*)" />
    <conditions>
       <add input="{HTTPS}" pattern="^OFF$" />
    </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}"
            appendQueryString="false" redirectType="SeeOther" />
</rule>

Ответ 5

Я считаю, что AndyH ответ будет самым простым и лучшим способом. Я нашел, что использование перезаписи URL также может конфликтовать с кодом, который может перенаправить пользователя на другую страницу. ИТ обычно ломается в нашей среде. Но решение Энди работало безупречно. Я также думаю, что решение Andy будет накладывать меньше накладных расходов на сервер, так как не нужно проверять каждый URL-адрес для возможных условий перезаписи.

Ответ 6


Я нашел обходное решение:

Подумайте, что в IIS предлагается веб-сайт: просто набор правил, путь, в котором получают файлы и привязки.

Кроме того, доступна функция "HTTP Redirect" (стандартно включенная в IIS), которая перенаправляет узел на другой, сохраняя все подкаталоги (это делает относительный путь). Обходной путь заключается в том, чтобы оставить только привязку для HTTPS (порт 443) на вашем веб-сайте и создать другую с привязкой к HTTP (порт 80) и установить для этого перенаправление HTTP на ваш URL с помощью https://.

Например, рассмотрим веб-сайт под названием mytest и его URL http://www.mytest.com/ и https://www.mytest.com/. Установите вместо него только привязку к https://www.mytest.com/ и удалите привязку http. Затем создайте новый веб-сайт с тем же локальным путем, который называется mytest http, с привязкой только к порту 80 (http://www.mytest.com/) и установите для этого HTTP Redirect to https://www.mytest.com/.
Простая и чистая, и это должно быть так же быстро, как непосредственно https-url для пользователя, потому что это просто внутренняя переадресация. Надеюсь, это сработает для вас!

Ответ 7

Вы можете добавить модуль перезаписи URL в IIS (IIS 7 или более поздней версии), который позволяет визуально создавать перенаправление. Модуль можно скачать здесь.

Этот пошаговый учебник сотворил для меня чудеса и объясняет, что при использовании этого модуля все, что он на самом деле делает, это добавляет некоторый код в ваш файл web.config следующим образом:

<rewrite>
    <rules>
        <rule name="Redirect to HTTPS" stopProcessing="true">
            <match url="(.*)" />
            <conditions>
                <add input="{HTTPS}" pattern="^OFF$" />
            </conditions>
            <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="SeeOther" />
        </rule>
    </rules>
</rewrite>

Ответ 8

Я обнаружил, что

<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />

Синтаксис будет работать только для веб файла ROOT web.config.

Если правило перезаписи применяется к виртуальному файлу web.config, используйте команду..

<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{URL}" />

Синтаксис {URL} будет включать начальную косую черту, виртуальный путь и любые параметры URL.