You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Web.config URL重写异常求助:含WWW的URL无法跳转HTTPS

解决Web.config URL重写中带WWW的HTTP URL无法跳HTTPS的问题

看起来你已经把大部分URL规范化规则都搞定了,唯独漏了对已带WWW但用HTTP访问的场景处理——这就是为什么这类URL不会触发HTTPS跳转的核心原因。我帮你调整了规则,既解决这个问题,又严格遵循你要求的「单次重定向」原则,完美覆盖所有需求:

修改后的完整规则配置

<rules>
  <!-- 资源文件白名单:直接放行,不处理后续规则 -->
  <rule name="WhiteList - resources" stopProcessing="true">
    <match url="^resources/" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
    <action type="None" />
  </rule>

  <!-- 移除default.aspx(服务器内部重写,不改变地址栏) -->
  <rule name="SEO - remove default.aspx" stopProcessing="false">
    <match url="(.*?)/?default\.aspx$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{HTTP_METHOD}" pattern="GET" />
    </conditions>
    <action type="Rewrite" url="_{R:1}" />
  </rule>

  <!-- 移除末尾斜杠(服务器内部重写,不改变地址栏) -->
  <rule name="SEO - Remove trailing slash" stopProcessing="false">
    <match url="(.+)/$" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{HTTP_METHOD}" pattern="GET" />
      <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    </conditions>
    <action type="Rewrite" url="_{R:1}" />
  </rule>

  <!-- 非自定义扩展名URL转小写(服务器内部重写,不改变地址栏) -->
  <rule name="SEO - ToLower" stopProcessing="false">
    <match url="(.*)" ignoreCase="false" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{REQUEST_URI}" pattern="\.pngx|\.jpgx|\.gifx|\.bmpx|\.orcx" negate="true" />
      <add input="{HTTP_METHOD}" pattern="GET" />
      <add input="{R:1}" pattern="[A-Z]" ignoreCase="false" />
    </conditions>
    <action type="Rewrite" url="_{ToLower:{R:1}}" />
  </rule>

  <!-- 核心规则:强制HTTPS + 强制WWW,单次重定向 -->
  <rule name="Force HTTPS and WWW" stopProcessing="true">
    <match url="(.*)" />
    <conditions logicalGrouping="MatchAny" trackAllCaptures="false">
      <!-- 匹配非HTTPS的请求 -->
      <add input="{HTTPS}" pattern="off" />
      <!-- 匹配不带WWW前缀的请求 -->
      <add input="{HTTP_HOST}" pattern="^www\.testssl\.orca-bree\.be$" negate="true" />
    </conditions>
    <action type="Redirect" url="https://www.testssl.orca-bree.be/{C:1}" redirectType="Permanent" />
    <serverVariables>
      <!-- 捕获原始URL,替换掉内部重写产生的_前缀 -->
      <set name="C:1" value="{R:1}" />
      <set name="C:1" value="{Replace:{C:1},^_+,}" />
    </serverVariables>
  </rule>

  <!-- 清理内部重写产生的_前缀(仅在已符合HTTPS+WWW标准时触发) -->
  <rule name="Clean up rewritten URLs" stopProcessing="true">
    <match url="^(_+)(.*)" />
    <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
      <add input="{HTTP_METHOD}" pattern="GET" />
      <!-- 确保已经是HTTPS和WWW,避免重复重定向 -->
      <add input="{HTTPS}" pattern="on" />
      <add input="{HTTP_HOST}" pattern="^www\.testssl\.orca-bree\.be$" />
    </conditions>
    <action type="Redirect" url="{R:2}" redirectType="Permanent" />
  </rule>
</rules>

关键改动说明

  1. 合并HTTPS与WWW规则,实现单次重定向
    新增的Force HTTPS and WWW规则用MatchAny逻辑,只要请求不符合「HTTPS+WWW」标准(不管是缺HTTPS还是缺WWW),就一次性跳转到最终的标准地址,完全避免多次重定向的问题。

  2. 处理内部重写的_前缀
    通过serverVariables把内部重写产生的_前缀提前替换掉,保证重定向的地址是干净的,不需要额外跳转。

  3. 优化清理规则的触发条件
    修改原有的清理规则,增加HTTPS=on和HTTP_HOST=www.testssl.orca-bree.be的检查,确保只有在已经符合标准的情况下,才清理内部重写的_前缀,避免和核心重定向规则冲突。

覆盖所有需求场景

现在这套规则可以完美处理你列出的所有情况:

  • 仅触发单次重定向
  • 自动忽略resources/下的资源文件
  • 移除URL中的default.aspx
  • 去除末尾斜杠(非文件/目录)
  • 非自定义扩展名的URL自动转小写(不含查询字符串)
  • 强制添加WWW前缀
  • 强制HTTPS(包括已带WWW的HTTP URL)

内容的提问来源于stack exchange,提问作者user2623023

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:25:39