我有问题。在IIS
我有一个包含两个端口80
和443(https)
的网站。我想将用户的所有http
次请求重定向到https
。我还添加了Rewrite rule to https
,但是当我进入浏览器http://localhost/site
时,它给了我相同的页面。我需要将用户重定向到httpS://localhost/site
。
也许这是因为我的本地配置?
我在Require SSL
上停用IIS
。
The rule is:
<rewrite>
<rules>
<rule name="HTTPS Redirect">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" ignoreCase="false" />
</conditions>
<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}{REQUEST_URI}" />
</rule>
</rules>
</rewrite>
谢谢。
答案 0 :(得分:14)
以下是我们在生产IIS 7站点上使用的确切规则,以将所有请求从HTTP重定向到HTTPS
<configuration>
<system.webServer>
<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="Found" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
您发布的内容与我们使用的内容之间存在一些细微差别。此外,由于您在本地主机上运行,您将不会使用带有visual studio的内置Web服务器吗?我认为它不会处理IIS重写规则。
答案 1 :(得分:5)
我意识到这可能不是你的问题,但是我有一个类似的崩溃是由另一个问题造成的。
我启用了需要SSL,导致网站不断返回403.因此,要使用此方法,您必须禁用SSL设置 - &gt;需要SSL。
希望这有助于某人。
答案 2 :(得分:0)
您可以将其添加到您的网页中。强制重定向。
if (!Request.IsSecureConnection)
{
Uri uri = new Uri(Request.Url, Request.RawUrl);
Response.Redirect(string.Format("https://{0}{1}{2}", uri.Host.StartsWith("www.x.com") ? uri.Host : "www.x.com", uri.AbsolutePath, uri.Query));
}
我刚看到你的mvc标签
将此属性添加到您的操作中。或控制器。
[RequireHttps]
答案 3 :(得分:0)
此外,如果您有多个规则,订单可能很重要。请确保在其他规则或重定向可能不会触发之前添加重定向规则。
以下是使用需要规则顺序的SPA的示例。
<rules>
// Adding this as last rule will cause it to not redirect
<rule name="HTTP/S to HTTPS Redirect" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{SERVER_PORT_SECURE}" pattern="^0$" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
</rule>
<rule name="static dist files" stopProcessing="true">
<match url="^(.+)" />
<conditions>
<add input="{APPL_PHYSICAL_PATH}app\{R:1}" matchType="IsFile" />
</conditions>
<action type="Rewrite" url="/app/{R:1}" />
</rule>
<rule name="index.html as document root" stopProcessing="true">
<match url="^$" />
<action type="Rewrite" url="/app/" />
</rule>
<rule name="SPA Routes" stopProcessing="true">
<match url=".*|.*/.*$" />
<conditions logicalGrouping="MatchAll">
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/app/" />
</rule>
</rules>
答案 4 :(得分:0)
它在IIS 8.5中对我有效 redirect
三点:
OFF
而不是^OFF$
url="https://{HTTP_HOST}/{REQUEST_URI}"
redirectType=Permanent
而不是Found
,尽管两者都可以,但在这种情况下最好使用Permanent
类型webconfig代码
<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}/{REQUEST_URI}" redirectType="Permanent" />
</rule>
</rules>
</rewrite>