仅重写子文件夹(HTTP到HTTPS)重定向到站点根目录

时间:2016-11-30 22:23:48

标签: redirect iis-8 url-rewrite-module

我正在尝试在IIS 8.5 Web服务器上为特定子文件夹重写HTTP到HTTPS,但它无法正常工作。我已经阅读了无数其他解决方案和博客帖子,但我没有尝试过任何工作。

http://domain.example.com/one/two/three/
应该重定向到...(相同的网址,但使用https)
https://domain.example.com/one/two/three/

但是重定向到...(使用https的站点根目录)
https://domain.example.com

loading ...(所需网址带https)
https://domain.example.com/one/two/three/
也重定向到...(使用https的站点根目录)
https://domain.example.com

它正在从网址中删除子文件夹。

此文件夹也需要使用Windows身份验证进行保护,我可以开始使用它,但无论是否启用身份验证,https重定向都会失败,因此我认为这不是原因。

在IIS中,我选择了所需的子文件夹(上例中为/ 3 /)并在那里创建了重写规则。

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

这当然适用于所需子文件夹中包含的任何文件和文件夹。 (/ 3)

我尝试了这个并重定向到明显正确的网址,但却提供了“太多重定向”错误:

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

1 个答案:

答案 0 :(得分:1)

你应该避免这样做:

  

在IIS中,我选择了所需的子文件夹(示例中为/ 3 /)   上面)并在那里创建了重写规则。

而是在应用程序根目录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,那么您必须将上述内容合并到您的解决方案中。