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

使用HttpPlatformHandler的IIS站点特定路由无法跳转至Next.js站点

IIS部署Next.js子路径404问题排查与解决

核心问题

  • 访问http://localhost/AppWithNode1/SimpleErrorView时,Next.js返回404错误页面
  • 控制台显示JS、CSS等静态资源也返回404
  • 已配置next.config.mjs中的basePath和assetPrefix,但问题未解决

1. 确认Next.js构建配置

确保next.config.mjs的配置完全匹配IIS子路径,代码如下:

/** @type {import('next').NextConfig} */
const nextConfig = {
  basePath: '/AppWithNode1',
  assetPrefix: '/AppWithNode1',
  output: 'standalone', // 推荐用此模式,减少部署依赖
}

export default nextConfig

注意:basePath和assetPrefix必须和IIS子应用路径完全一致,包括大小写。配置完成后,重新执行npm run build构建项目。

2. 修正IIS web.config重写规则

web.config需要正确映射静态资源并转发页面请求到Next.js服务,示例配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <!-- 优先处理Next.js静态资源,避免被页面规则拦截 -->
        <rule name="Next.js Static Files" stopProcessing="true">
          <match url="^AppWithNode1/_next/(.*)" />
          <action type="Rewrite" url="_next/{R:1}" />
        </rule>
        <!-- 非文件/目录的请求转发到Next.js服务 -->
        <rule name="Next.js Pages" stopProcessing="true">
          <match url="^AppWithNode1/(.*)" />
          <action type="Rewrite" url="server.js/{R:1}" />
          <conditions>
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
        </rule>
      </rules>
    </rewrite>
    <!-- 配置iisnode调用Node.js进程 -->
    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode" />
    </handlers>
    <iisnode nodeProcessCommandLine="C:\Program Files\nodejs\node.exe" />
  </system.webServer>
</configuration>

关键注意点:

  • 静态资源规则要放在页面规则前面,确保_next目录下的资源能直接访问
  • 页面规则要排除实际存在的文件和目录,防止静态资源被错误转发
  • 确认服务器已安装并启用iisnode模块

3. 检查IIS站点配置

  • 确认默认站点下的AppWithNode1应用程序,物理路径指向Next.js构建后的out目录(或standalone模式下的对应目录)
  • 将应用程序池的.NET CLR版本设置为无托管代码,避免与Node.js运行冲突

4. 验证静态资源路径

构建完成后,查看out/_next/static目录下的资源文件,检查其引用路径是否包含/AppWithNode1前缀。如果没有,说明basePath配置未生效,需重新确认next.config.mjs并重新构建。

5. 日志排查

  • 查看IIS请求日志(默认路径:C:\inetpub\logs\LogFiles),确认请求是否被正确重写
  • 查看Next.js服务的控制台输出,确认服务是否接收到请求,以及请求路径是否符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 03:16:23