IIS 7.5 URL Rewrite - Перенаправление с http на https для контроллера учетной записи, но с https на http для всего остального - PullRequest
1 голос
/ 11 мая 2011

Я нашел кусочки того, что мне нужно, чтобы сделать эту работу, но не смог собрать все вместе в работоспособное решение.

Я работаю на сайте в интрасети и хочудля обеспечения * только действий входа в систему и выхода из нее на контроллере учетной записи с помощью https.У меня правильно установлен сертификат, и я могу успешно перенаправить трафик на эти действия контроллера в https с помощью правила UrlRewrite:

<rule name="Redirect to HTTPS" stopProcessing="true">
    <match url="^account/logon$|^account/logoff$" />
        <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
        </conditions>
    <action type="Redirect" url="https://{HTTP_HOST}/{R:0}" redirectType="Permanent" />
</rule>

Теперь, однако, я также хочу перенаправить * все остальные запросы моего сайта(кроме трафика к двум действиям) назад в http.Я не заинтересован в обсуждении достоинств этого подхода, поскольку у меня есть веские причины, по которым я хочу перенаправить обратно из https на http.

Я попытался написать некоторый код в действиях для достиженияэто, но у меня есть серьезные проблемы с этим.Я не знаю, так ли это, потому что я работаю с двумя серверами с балансировкой нагрузки или чем-то, но все, что я пытаюсь, просто выдает мне сообщение об ошибке «слишком много перенаправлений».

Итак, два вопроса:

  1. Лучше ли использовать правило UrlRewrite для перенаправления из https или действий контроллера?
  2. У кого-нибудь есть пример работающего кода или что-то, что может, по крайней мере, помочь мне начатьправильный путь?

Любая помощь очень ценится!

Ответы [ 3 ]

1 голос
/ 03 августа 2011

Лучше поздно, чем никогда. Это может помочь вам или кому-то еще.

<rule name="Redirect to HTTP">
        <match url="secureDir/(.*)" negate="true" />
        <conditions>
          <add input="{HTTPS}" pattern="^ON$" />
        </conditions>
        <action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" />
      </rule>

      <rule name="Redirect to HTTPS" stopProcessing="true">
        <match url="secureDir/(.*)" />
        <conditions>
          <add input="{HTTPS}" pattern="^OFF$" />
        </conditions>
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" />
      </rule>
0 голосов
/ 11 мая 2011

У меня есть некоторый код здесь , который позволяет вам управлять этим с помощью атрибутов.

MVC уже имеет атрибут [RequireHttps], который вы применили бы к своим страницам входа / выхода.Мой код расширяет этот подход и дает вам дополнительный атрибут [ExitHttpsIfNotRequired].С этим атрибутом, примененным к вашему базовому контроллеру, при попытке доступа к любому действию с HTTPS, у которого нет [RequireHttps], он перенаправит вас на HTTP.

0 голосов
/ 11 мая 2011

Во-первых, вам придется столкнуться с некоторыми трудностями, если речь идет о нестраничных ресурсах - как вы ссылаетесь на изображения и таблицы стилей?

Что касается рассматриваемого вопроса, я думаю, что вы хотите форсировать этот апстрим веб-серверов, например, на балансировщике нагрузки. Я бы также поддержал контроллер аккаунта, добавив атрибут RequireHttps.

Наконец, помните, что даже если процесс входа в систему защищен, если этот файл cookie не передается по протоколу HTTPS, вы легко можете получить сценарий, похожий на запуск.

...