Относительное перенаправление 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 на странице? У меня такое чувство, что оно имеет какое-то отношение к шаблону, но я не могу понять синтаксис.
Ответы
Ответ 1
Я нашел способ сделать это, и вам не нужен модуль Rewrite для этого.
В Windows 8 (IIS 8.5) у меня работает следующее:
- Удалите HTTP-привязку с вашего сайта (оставьте HTTPS на месте)
- Добавь другой сайт
- Убедитесь, что новый сайт имеет HTTP-привязку
- Настройте 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.