IIS HTTP到HTTPS相对重定向(IIS HTTP to HTTPS relative red

2019-08-18 22:27发布

最近,我得到了我的网站的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版本? 我有这事做与图案的感觉,但我似乎无法找出语法。

Answer 1:

我发现了一个办法做到这一点,你不需要重写模块它。
以下为我工作在Windows 8(IIS 8.5):

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

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



Answer 2:

将其更改为:

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


Answer 3:

我无法评论,但还是我要离开这个作为下AndyH的答案评论。 该解决方案是正确的,虽然我打了一个进一步的障碍(可能是与使用Adobe的ColdFusion服务器的)。 我想分享一些进一步的研究我对任何其他不幸的灵魂谁可能会碰到它做的事。

设置完毕后,重定向总是在结束这个网址:

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

对此问题进行修复的一个Adobe线程(发现https://forums.adobe.com/thread/1034854 ):我不得不改变一个应用程序池的设置如下:

真正的网站(HTTPS唯一有约束力的,实际上包含的代码和虚拟目录)的应用程序池的高级设置: Enable 32-Bit Applications : False

Http_Redirect网站(HTTP绑定只,是一个文件夹中,没有目录空白壳)应用程序池的高级设置: 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检查。 然后,它会保存查询字符串为好。



Answer 4:

我在同样的问题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>


Answer 5:

我相信AndyH的回答是最简单,最好的方式。 我已经使用URL重写还可以用代码,将用户重定向到另一个页面发现的冲突。 它在我们的环境中常见破门。 但安迪的解决方案完美地工作。 我也觉得安迪的解决方案将少放开销在服务器上,因为它并不需要检查每个URL击中它可能重写条件。



Answer 6:


我发现了一个解决办法:

考虑一下在IIS中consired网站:只需一组规则,路径中获取文件和其绑定。

此外,还提供一个名为“HTTP重定向 ”功能(包含在IIS地规范),重定向的主机之间,保持所有子目录(它使相对路径)。 解决方法是只留在您的网站HTTPS(端口443)的结合,并与HTTP绑定(80端口),然后再创建这个HTTP重定向到你的URL设置https://

例如,考虑一个网站名为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,因为它只是一个内部重定向。 我希望能为您的工作!



Answer 7:

您可以添加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>


Answer 8:

我发现,

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

语法仅用于网站的根Web.config文件的工作。

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

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

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



文章来源: IIS HTTP to HTTPS relative redirect