Исключить определенные URL из правила перенаправления http в https - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть следующее правило перенаправления, чтобы заставить весь трафик http к https. Однако нам нужно обслуживать некоторые страницы, которые имеют проблемы с отображением в https, и заставить их быть http, пока мы не сможем обновить их для работы в https.

  <rule name="Redirect to https" stopProcessing="true">
    <match url=".*" />
    <conditions>
      <add input="{HTTPS}" pattern="off" ignoreCase="true" />
    </conditions>

    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
  </rule>

Одна вещь, которую все эти страницы имеют в общем, в том, что "/ SSLA /" является частью URL. Я не гуру переписывания, которым бы я хотел быть, но есть несколько возможных способов исправить это:

a) Каким-то образом обновите это правило, чтобы исключить URL с помощью "/SSLA/".

B) Добавить правило перед этим правилом, которое перехватывает что-либо с помощью "/ SSLA /" и перенаправляет на http, если оно идет на https, и (либо в том же правиле, либо в отдельном правиле?) Также ничего не делает для запросов http, но останавливает обработки, чтобы не попасть в это глобальное правило перенаправления с http на https.

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

Так что ... пожалуйста, помогите! :)

РЕДАКТИРОВАТЬ: я должен отметить, что я обновил код C # для перенаправления на http для этих страниц, но, конечно, это вызывает цикл с вышеуказанным правилом. Но я просто хочу сказать, что все, что мне нужно , - это чтобы правила перенаправления не заставляли запросы http для страниц с / SSLA на https, поскольку код перенаправляет любые такие запросы https на http. Но если это тоже тривиальный вопрос, чтобы правило перенаправления принудительно отправляло запросы https с "/ SSLA /" в http, то я мог бы удалить код c #, который делает то же самое.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Вы должны использовать два правила перезаписи:

  1. Для перенаправления HTTPS -> HTTP для SSLA/* страниц

  2. Для перенаправления HTTP -> HTTPS для не SSLA/* страниц.

Посмотрите мой пример ниже, как я фильтрую SSLA и non SSLA страницы

    <rule name="Redirect to http SSLA" stopProcessing="true">
       <match url="^SSLA" />
       <conditions>
           <add input="{HTTPS}" pattern="on" ignoreCase="true" />
       </conditions>
       <action type="Redirect" url="http://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
    </rule>

    <rule name="Redirect to https" stopProcessing="true">
       <match url="^SSLA" nagate="true" />
       <conditions>
           <add input="{HTTPS}" pattern="off" ignoreCase="true" />
       </conditions>
       <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" />
    </rule>
0 голосов
/ 02 сентября 2018

попробуйте использовать

<match url="((?!SSLA).)*" />

застраховано

<match url=".*" />
...