URL重写以删除www,并使用web配置(c#.net)重定向到https
本文关键字:配置 net https 重定向 web 删除 重写 www URL | 更新日期: 2023-09-27 17:59:56
我的web配置中有以下代码,可以将前缀为"www"的URL和非SSL请求重定向到https://mydomain.com,因为SSL证书是在没有www 的情况下注册到域的
<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/semething(正确)
2) http://www.mydomain.com/something-->https://mydomain.com/semething(正确)
3) https://www.mydomain.com/something-->显示证书错误(此网站的安全证书有问题。)
当您在证书错误页面上选择"继续访问此网站(不推荐)"时,url将被正确重写(https://mydomain.com/something)
如何确保证书错误不显示?
感谢
解决问题的一种方法是注册两个独立的规则:
- 删除www
-
强制HTTPS。
<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>
所以我们在项目中使用它,并且它很有效。
让我知道它有帮助:
<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>
当您在本地机器上访问网站时,它也会忽略该请求。
我对此不确定,因为我在url重写方面没有太多经验,但尝试帮助不会有什么坏处
你可以试试这个
<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://mydomain.com/{R:1}" redirectType="Permanent" />
我在谷歌上搜索了很多,发现了这个,但它可能没有达到你的目的。
使用重写规则无法解决此问题:问题是在建立与服务器的连接时验证证书。由于您的服务器没有www.
变体的有效证书,因此该证书无效,浏览器将通知其用户。
只有在用户同意继续后,请求才会发送到服务器,重写规则才会生效。
我看到了同样的问题。因为域没有www的SSL证书,所以当URL包含https时,web.config代码不会删除www。结果是使用http,无论是否使用www,都会正确地将其重定向到https://domain,但如果它以https:和www开头,它就会被卡住。
那么,这能在DNS级别解决吗?这样www就不会被定义为CNAME,而是重定向到那里?谷歌域名似乎对此有合成记录。有人成功使用过它吗?