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)

如何确保证书错误不显示?

感谢

URL重写以删除www,并使用web配置(c#.net)重定向到https

解决问题的一种方法是注册两个独立的规则:

  1. 删除www
  2. 强制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,而是重定向到那里?谷歌域名似乎对此有合成记录。有人成功使用过它吗?