我最近获得了我网站的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版本的页面?我觉得它与模式有关,但我似乎无法弄清楚语法。
答案 0 :(得分:12)
我找到了一种方法,你不需要Rewrite模块。
以下在Windows 8(IIS 8.5)上适用于我:
现在,所有HTTP请求都将重定向到您的HTTPS站点,并保留其余的URL。
答案 1 :(得分:5)
将其更改为:
<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>
答案 2 :(得分:1)
我还不能发表评论,或者我会在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绑定,是没有目录的文件夹的空白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
的复选框。然后它也会保存查询字符串。
答案 3 :(得分:1)
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>
答案 4 :(得分:0)
我相信AndyH的答案是最简单和最好的方式。我发现使用URL重写也可能与可能将用户重定向到另一个页面的代码冲突。 IT通常在我们的环境中破裂。但安迪的解决方案运作完美无缺。我还认为Andy的解决方案会减少服务器上的开销,因为它不需要检查每个URL是否有可能重写条件。
答案 5 :(得分:0)
我找到了解决方法:
考虑一下IIS中的一个网站:简单的一组规则,获取文件及其绑定的路径。
此外,还有一个名为&#34; HTTP Redirect &#34;的功能。 (标准地包含在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 Redirect
到https://www.mytest.com/
。
简单干净,应该与用户的https网址一样快,因为它只是一个内部重定向。我希望这对你有用!
答案 6 :(得分:0)
您可以将URL重写模块添加到IIS(IIS 7或更高版本),以便以可视方式添加创建重定向。该模块可以下载here。
这个step-by-step tutorial为我创造了奇迹,并解释说在使用这个模块时,实际上所做的只是在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>
答案 7 :(得分:0)
我发现
<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参数。