我需要将所有https请求重定向到http,例如,如果有人访问https://www.example.com/another-page/到http://www.example.com/another-page/
我现在在web.config中有以下重写规则,但它无法正常工作。它将https://www.example.com/another-page/重定向到https://www.example.com/,所以要重定向到网站的根目录,但我希望重定向保留在同一个网址中,并且只将https重写为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,但保持访问的完整网址将非常感谢!
答案 0 :(得分:15)
我制定了你的规则,清理了一点,它起作用了;所以这并没有真正回答新的问题。
建议:删除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为Permanent,并且您仍在开发或测试时,浏览器通常会缓存先前的规则。清除浏览器缓存,和/或删除永久,和/或以隐身模式浏览。完成测试后,将其更改为永久性。请参阅此答案中的第2和第3行:https://stackoverflow.com/a/9204355/292060
答案 1 :(得分: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>