繁体   English   中英

IIS HTTP到HTTPS相对重定向

[英]IIS HTTP to HTTPS relative redirect

我最近获得了我的网站的SSL证书,并希望将所有流量重定向到HTTPS。 我得到了一切去https://mydomain.com但如果有人进入http://mydomain.com/anotherpage它会删除另一页,只是将用户带到主页。

我的web.config文件中的规则如下所示:

<rule name="HTTP to HTTPS redirect" stopProcessing="true">
  <match url="(.*)" />
  <conditions>
    <add input="{HTTPS}" pattern="off" ignoreCase="true" />
  </conditions>
  <action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
</rule>

我也试过https://{HTTP_HOST}{REQUEST_URI}但没有成功。 任何人都可以告诉我我需要做些什么来使网站重定向到正确的HTTPS版本的页面? 我觉得它与模式有关,但我似乎无法弄清楚语法。

我找到了一种方法,你不需要Rewrite模块。
以下适用于Windows 8(IIS 8.5):

  1. 从您的站点删除HTTP绑定(保留HTTPS)
  2. 添加其他网站
  3. 确保新站点具有HTTP绑定
  4. 配置HTTP重定向,如下所示:

在此输入图像描述

现在,所有HTTP请求都将重定向到您的HTTPS站点,并将保留URL的其余部分。

将其更改为:

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

我还不能发表评论,或者我会在AndyH的回答中留下这个评论。 解决方案是正确的,虽然我遇到了一个进一步的障碍(可能与使用Adobe的Coldfusion服务器有关)。 我想分享一些进一步的研究,我必须为任何可能遇到它的其他不幸的灵魂做。

设置完成后,重定向将始终以此URL结尾:

https://xxx.xxx.com/jakarta/isapi_redirect.dll

对此的修复是在Adobe线程( https://forums.adobe.com/thread/1034854 )中找到的:我必须更改应用程序池的设置,如下所示:

真实站点(仅限HTTPS绑定,实际上包含代码和虚拟目录)应用程序池的高级设置: Enable 32-Bit Applications : False

Http_Redirect站点(仅限HTTP绑定,是没有目录的文件夹的空白shell)应用程序池的高级设置: Enable 32-Bit Applications : True


编辑:另一个与查询字符串保存相关的细节:

根据这篇文章的建议( http://www.developerfusion.com/code/4678/permanent-301-redirect-with-querystring-in-iis/

在域末尾添加$S$Q ,并确保选中Redirect all requests to exact destination的框。 然后它也会保存查询字符串。

我有同样的问题, R:1正在丢弃我的文件夹。 我这样修好了。

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

我相信AndyH的答案是最简单和最好的方式。 我发现使用URL重写也可能与可能将用户重定向到另一个页面的代码冲突。 IT通常在我们的环境中破裂。 但安迪的解决方案运作完美无缺。 我还认为Andy的解决方案会减少服务器上的开销,因为它不需要检查每个URL是否有可能重写条件。


我找到了一个解决方法:

考虑一下IIS中的一个网站:简单的一组规则,获取文件及其绑定的路径。

此外,还有一个名为“ HTTP重定向 ”的功能(在IIS中标准配置),它将主机重定向到另一个主机,保留所有子目录(它构成一个相对路径)。 解决方法是在您的网站中仅保留HTTPS(端口443)的绑定,并使用HTTP上的绑定(端口80)创建另一个绑定,并使用https://为您的URL设置HTTP重定向。

例如,考虑一个名为mytest的网站及其网址http://www.mytest.com/https://www.mytest.com/ 设置为仅在https://www.mytest.com/绑定,并删除http绑定。 然后创建一个具有相同本地路径的新网站,称为mytest http ,仅通过端口80( http://www.mytest.com/ )绑定,并为此设置HTTP Redirecthttps://www.mytest.com/
简单而干净,应该与用户的https url一样快,因为它只是一个内部重定向。 我希望能为你效劳!

您可以将URL重写模块添加到IIS(IIS 7或更高版本),这允许您以可视方式添加创建重定向。 该模块可以在这里下载。

这个循序渐进的教程为我创造了奇迹并解释说,在使用这个模块时,它实际上所做的就是在web.config文件中添加一些代码:

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

我发现了

<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />

语法仅适用于网站的ROOT web.config文件。

如果重写规则应用于虚拟web.config文件,则使用..

<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{URL}" />

{URL}语法将包括初始正斜杠,虚拟路径和任何URL参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM