2016-11-30 14 views
1

Я пытаюсь переписать HTTP на HTTPS для определенной подпапки на моем веб-сервере IIS 8.5, но он не работает. Я читал бесчисленные другие решения и сообщения в блогах, но ничего не пробовал.Переписывать только вложенную папку (HTTP to HTTPS) перенаправляет на сайт root

http://domain.example.com/one/two/three/
должен перенаправлять ... (тот же адрес, но с использованием протокола HTTPS)
https://domain.example.com/one/two/three/

но вместо этого перенаправляет на ... (корень сайта с использованием протокола HTTPS)
https://domain.example.com

нагрузки. .. (желаемый URL с https)
https://domain.example.com/one/two/three/
также перенаправляется на ... (корень сайта с использованием https)
https://domain.example.com

это удаление подпапок с URL.

Эта папка также должна быть защищена с помощью проверки подлинности Windows, с которой я могу работать, но перенаправление https не работает с включенной аутентификацией или без нее, поэтому я не думаю, что это причина.

В рамках IIS I выбрана желаемая вложенная папка (/ three/в примере выше) и создана там правило Rewrite.

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

Это должно, конечно, работать с любыми файлами и папками, содержащимися в желаемой подпапке. (/ Три)

Я попробовал это, и он перенаправляет на кажущуюся правильный URL, но выдает ошибку «слишком много переадресаций»:

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

ответ

0

Вы должны избегать делать это:

Within IIS I selected the desired subfolder (/three/ in the example above) and created the Rewrite rule there.

Вместо установите правила перезаписи в Web.config в корне приложения. Вы можете перенаправить определенную папку на HTTPS, включив его в параметре match следующим образом:

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <rewrite> 
      <rules> 
       <rule name="Redirect Subfolder" stopProcessing="true"> 
        <match url="^one/two/three/" /> 
        <conditions logicalGrouping="MatchAll"> 
         <add input="{HTTPS}" pattern="^OFF$" /> 
        </conditions> 
        <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" redirectType="Permanent" /> 
       </rule> 
      </rules> 
     </rewrite> 
    </system.webServer> 
</configuration> 

Пожалуйста, обратите внимание, что это минимальный Web.config файл, который делает то, что вы ищете. Если ваше приложение уже содержит Web.config в корневой папке, вам придется объединить приведенное выше в свое решение.