使用web配置(c#.net)重写URL以删除www并重定向到https
我的web配置中有以下代码,可以将前缀为“www”的URL和非SSL请求重定向到https://mydomain.com,因为SSL证书是在没有www的情况下注册到域的使用web配置(c#.net)重写URL以删除www并重定向到https,c#,.net,url-rewriting,https,no-www,C#,.net,Url Rewriting,Https,No Www,我的web配置中有以下代码,可以将前缀为“www”的URL和非SSL请求重定向到https://mydomain.com,因为SSL证书是在没有www的情况下注册到域的 <rewrite> <rules> <rule name="Remove WWW prefix and redirect to https" > <match url="(.*)" ignoreCase="true" /> <conditi
<rewrite>
<rules>
<rule name="Remove WWW prefix and redirect to https" >
<match url="(.*)" ignoreCase="true" />
<conditions logicalGrouping="MatchAny">
<add input="{HTTP_HOST}" pattern="^(www\.)(.*)$" ignoreCase="true" />
<add input="{HTTPS}" pattern="off" ignoreCase="true" />
</conditions>
<action type="Redirect" redirectType="Permanent" url="https://mydomain.com/{R:1}" />
</rule>
</rules>
</rewrite>
结果是:
1) http://mydomain.com/something-->https://mydomain.com/something(正确)
2) http://www.mydomain.com/something-->https://mydomain.com/something(正确)
3) https://www.mydomain.com/something-->显示证书错误(此网站的安全证书有问题。)
在证书错误页面上选择“继续访问此网站(不推荐)”,url将被正确重写(https://mydomain.com/something)
如何确保证书错误不显示
谢谢你我不确定这一点,因为我没有太多的url重写经验,但尝试帮助不会有什么坏处。
你可以试试这个
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://mydomain.com/{R:1}" redirectType="Permanent" />
我在谷歌上搜索了很多,发现了这个,但它可能没有达到你的目的。所以我们在我们的项目中使用了这个,这个很有效 让我知道这有助于:
<rewrite>
<rules>
<rule name="Redirect to https">
<match url="(.*)"/>
<conditions>
<add input="{HTTPS}" pattern="Off"/>
<add input="{REQUEST_METHOD}" pattern="^get$|^head$" />
<add input="{HTTP_HOST}" pattern="localhost" negate="true"/>
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}"/>
</rule>
</rules>
</rewrite>
当您在本地计算机上访问站点时,它也会忽略该请求。解决此问题的一种方法是注册两个单独的规则:
<rule name="Remove www" stopProcessing="true">
<match url="(.*)" negate="false"></match>
<conditions>
<add input="{HTTP_HOST}" pattern="^www\.(.*)$" />
</conditions>
<action type="Redirect" url="https://{C:1}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
<rule name="Force HTTPS" enabled="true">
<match url="(.*)" ignoreCase="false" />
<conditions>
<add input="{HTTPS}" pattern="off" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" appendQueryString="true" redirectType="Permanent" />
</rule>
使用重写规则无法解决此问题:问题是在建立与服务器的连接时验证了证书。由于您的服务器没有适用于
www.
变体的有效证书,该证书无效,浏览器将通知其用户
只有在用户同意继续之后,请求才会发送到服务器,重写规则才会生效。我也看到了同样的问题。因为域没有www的SSL证书,所以当URL包含https时,web.config代码不会删除www。结果是使用http(带或不带www)将其正确重定向到https://domain,但如果它以https:和www开头,它就卡住了
那么,这可以在DNS级别上解决,从而使www不被定义为CNAME,而只是重定向到那里吗?谷歌域名似乎有这方面的合成记录。有人成功使用过它吗?谢谢,但不幸的是,结果是一样的。这不会删除www。