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

使用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

我的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/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>


当您在本地计算机上访问站点时,它也会忽略该请求。

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

  • 删除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>
    
    
    

  • 使用重写规则无法解决此问题:问题是在建立与服务器的连接时验证了证书。由于您的服务器没有适用于
    www.
    变体的有效证书,该证书无效,浏览器将通知其用户


    只有在用户同意继续之后,请求才会发送到服务器,重写规则才会生效。

    我也看到了同样的问题。因为域没有www的SSL证书,所以当URL包含https时,web.config代码不会删除www。结果是使用http(带或不带www)将其正确重定向到https://domain,但如果它以https:和www开头,它就卡住了


    那么,这可以在DNS级别上解决,从而使www不被定义为CNAME,而只是重定向到那里吗?谷歌域名似乎有这方面的合成记录。有人成功使用过它吗?

    谢谢,但不幸的是,结果是一样的。这不会删除www。