8

我的 web-config 中有以下代码,以便能够将前缀为“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)

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

谢谢

4

5 回答 5

3

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

  1. 删除万维网。
  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>
    
于 2017-03-30T10:31:56.970 回答
2

所以我们在我们的项目中使用它,这很有效。

让我知道这有帮助:

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

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

于 2014-10-10T14:35:31.110 回答
0

我不确定这一点,因为我在 url 重写方面没有太多经验,但尝试帮助不会受到伤害。
你可以试试这个

<conditions>
<add input="{HTTPS}" pattern="^OFF$" />
</conditions>
<action type="Redirect" url="https://mydomain.com/{R:1}" redirectType="Permanent" />

我用谷歌搜索了很多,发现了这个,但它可能不会像你想要的那样。

于 2014-04-25T08:53:54.887 回答
0

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

只有用户同意继续之后,才会将请求发送到服务器并启动重写规则。

于 2018-03-07T13:44:35.027 回答
0

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

那么这可以在 DNS 级别解决,以便 www 不被定义为 CNAME 并且只是重定向到那里?Google Domains 似乎有这方面的综合记录。有人成功使用过吗?

于 2020-12-09T22:39:28.993 回答