2016-11-30 3 views
1

J'essaie de réécrire HTTP en HTTPS pour un sous-dossier spécifique sur mon serveur Web IIS 8.5 mais cela ne fonctionne pas. J'ai lu d'innombrables autres solutions et articles de blog mais rien de ce que j'ai essayé n'a fonctionné.Réécrire le sous-dossier uniquement (HTTP vers HTTPS) redirige vers la racine du site

http://domain.example.com/one/two/three/
devrait rediriger vers ... (même URL, mais en utilisant https)
https://domain.example.com/one/two/three/

mais est plutôt rediriger vers ... (racine du site en utilisant le protocole HTTPS)
https://domain.example.com

chargement. .. (url souhaitée avec https)
https://domain.example.com/one/two/three/
redirige également vers ... (racine du site utilisant https)
https://domain.example.com

supprime les sous-dossiers de l'URL.

Ce dossier doit également être protégé avec l'authentification Windows, que je peux utiliser mais la redirection https échoue avec ou sans l'authentification activée, donc je ne pense pas que ce soit la cause.

Dans IIS, j'ai sélectionné le sous-dossier souhaité (/ trois/dans l'exemple ci-dessus) et créé la règle de réécriture.

<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> 

Cela devrait bien sûr travailler avec tous les fichiers et dossiers contenus dans le sous-dossier souhaité. (/ Trois)

J'ai essayé et il redirige vers l'url apparente correcte, mais donne l'erreur « trop de redirection »:

<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> 

Répondre

0

Vous devriez éviter de le faire:

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

lieu configurer les règles de réécriture dans Web.config à la racine de l'application. Vous pouvez rediriger en incluant un dossier spécifique à HTTPS dans le paramètre match comme suit:

<?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> 

S'il vous plaît noter que ceci est un fichier Web.config minimal qui fait ce que vous recherchez. Si votre application contient déjà un Web.config dans le dossier racine, vous devrez fusionner ce qui précède avec votre solution.