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

IIS部署React Node.js项目如何实现非www转www及HTTP跳转HTTPS

解决方案

核心问题原因

  • IIS重写规则顺序错误:你把React路由重写规则放在了最前面,且开启了stopProcessing="true",所有非静态文件、非/api路径的请求会直接被重写到根目录,不会执行后面的HTTP转HTTPS、非www转www的规则,导致内页跳转失效
  • 同时在IIS层和Node.js层重复配置重定向逻辑,逻辑冲突会导致跳转异常
  • 非www跳转规则未覆盖HTTPS场景下的非www域名访问

修正步骤

第一步:调整web.config规则顺序和逻辑

IIS重写规则是从上到下匹配执行的,要把重定向类规则放在最前面,路由重写规则放在最后,修正后的完整配置如下:

<?xml version="1.0"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <!-- 1. HTTP转HTTPS规则放最前面 -->
                <rule name="httptohttps" stopProcessing="false">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTPS}" pattern="^OFF$" />
                    </conditions>
                    <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" redirectType="Permanent" />
                </rule>
                <!-- 2. 非www跳www规则 -->
                <rule name="non-wwwtowww" stopProcessing="true">
                    <match url="(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="^example\.com$" />
                    </conditions>
                    <action type="Redirect" url="https://www.example.com{REQUEST_URI}" redirectType="Permanent" />
                </rule>
                <!-- 3. React路由重写规则放最后 -->
                <rule name="React Routes" stopProcessing="true">
                    <match url=".*" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="/" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>
</configuration>

第二步:删除Node.js层的重定向代码

你写的Node.js重定向逻辑可以全部移除,IIS层已经完成所有重定向处理,重复配置会导致逻辑冲突,反而出现跳转异常。如果确实要保留Node层逻辑,需要额外配置IIS转发X-Forwarded-Proto请求头,没必要额外增加复杂度。

第三步:清理缓存测试

301永久重定向会被浏览器长期缓存,修改配置后需要清理浏览器缓存,或者用无痕模式测试跳转效果。

验证效果

调整后所有场景都会正常跳转:

  • 访问http://example.com/xyz → 跳转到https://www.example.com/xyz
  • 访问http://www.example.com/xyz → 跳转到https://www.example.com/xyz
  • 访问https://example.com/xyz → 跳转到https://www.example.com/xyz
  • 所有跳转后的页面路由都能正常加载,不会出现404

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 11:21:02