2014-09-10 149 views
5

我需要重定向所有HTTPS请求的HTTP,例如,如果有人访问https://www.example.com/another-page/http://www.example.com/another-page/IIS重写规则在web.config中重定向HTTPS请求HTTP

我在我的web.config以下重写规则现在,但它不能正常工作。它正在将https://www.example.com/another-page/重定向到https://www.example.com/,所以到站点的根目录,而是我希望重定向保留在同一个URL中,并且只将http重写为http。

<rule name="Redirect to HTTP" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{R:1}" pattern="^onepage/(.*)$" negate="true" /> 
     <add input="{HTTPS}" pattern="^ON$" /> 
    </conditions> 
    <action type="Redirect" url="http://{HTTP_HOST}/{R:0}" redirectType="Permanent" /> 
</rule> 

任何有关更改上述规则的帮助,以便它只将https更改为http,但保留完整的url访问将不胜感激!

+1

? – cheesemacfly 2014-09-12 00:46:07

+0

非常相关,虽然这个问题在技术上不是一个笨蛋:http://stackoverflow.com/questions/9823010/how-to-force-https-using-a-web-config-file – 2015-08-04 20:30:20

回答

2

请将下面的代码粘贴到web.config文件中。

<rule name="Redirect to http" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTP}" pattern="off" ignoreCase="true" /> 
    </conditions> 
    <action type="Redirect" url="http://{HTTPS_HOST}{REQUEST_URI}" redirectType="Permanent" appendQueryString="false" /> 
</rule> 
+0

谢谢,但正如在问题,网站运行IIS不是Apache,所以没有.htaccess文件。相反,我使用的是web.config文件和IIS重写模块。 – IntricatePixels 2014-09-26 20:14:52

+0

对不起。请使用编辑后的代码。 – 2014-09-29 12:47:14

11

我建立你的规则,清理一点,它的工作;所以这不是真的应对新的。

建议:删除onepage输入条件只是为了测试,因为cheesmacfly在问题评论中提出。

此外,请尝试将操作更改为{R:1}而不是{R:0}。在这种情况下应该没有关系,但我只是喜欢使用1和以上来匹配特定的捕获组。 R:0表示整个匹配的字符串,它总是让我感到困惑。

<rule name="Redirect to HTTP" stopProcessing="true"> 
    <match url="(.*)" /> 
    <conditions> 
     <add input="{HTTPS}" pattern="^ON$" /> 
    </conditions> 
    <action type="Redirect" url="http://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> 
</rule> 

一种可能性是您的浏览器缓存了先前您的规则尝试。当redirectType是永久的,并且您仍在开发或测试时,浏览器通常会缓存先前的规则。清除您的浏览器缓存,和/或删除永久,和/或浏览隐身模式。完成测试后,将其更改为永久性。请参阅数字2和3在此答案:https://stackoverflow.com/a/9204355/292060

+0

这是正确的答案,谢谢 – Rippo 2016-08-10 13:56:44