Next.js 15应用部署至IIS服务器后主内容组件显示404问题求助
Next.js 15应用部署至IIS服务器后主内容组件显示404问题求助
我最近把自己开发的Next.js应用部署到IIS服务器上,参考了不少文档搭建了对应的目录结构。部署完成后在本地IIS测试时,发现页面的Header和Footer能正常渲染,但RootLayout函数中传入的主内容组件(children部分)一直返回404错误,实在找不到问题出在哪,麻烦各位大佬帮忙排查下!
我的配置文件如下:
1. server.js
const { createServer } = require('http') const { parse } = require('url') const next = require('next') const dev = process.env.NODE_ENV !== 'production' const port = process.env.PORT || 3000; const app = next({ dev }) const handle = app.getRequestHandler() app.prepare().then(() => { createServer((req, res) => { // Be sure to pass `true` as the second argument to `url.parse`. // This tells it to parse the query portion of the URL. const parsedUrl = parse(req.url, true) const { pathname, query } = parsedUrl if (pathname === '/a') { app.render(req, res, '/a', query) } else if (pathname === '/b') { app.render(req, res, '/b', query) } else { handle(req, res, parsedUrl) } }).listen(port, (err) => { if (err) throw err console.log(`> Ready on http://localhost:${port}`) }) })
2. web.config
<configuration> <system.webServer> <rewrite> <rules> <rule name="nextjs-app"> <match url="/*" /> <action type="Rewrite" url="server.js" /> </rule> </rules> </rewrite> <iisnode node_env="production" nodeProcessCommandLine=""C:\Program Files\nodejs\node.exe"" interceptor=""%programfiles%\iisnode\interceptor.js"" /> </system.webServer> <location path="" overrideMode="Deny"> <system.webServer> <handlers> <add name="iisnode" path="server.js" verb="*" modules="iisnode" /> </handlers> </system.webServer> </location> </configuration>
3. next.config.ts
import type { NextConfig } from "next"; const nextConfig: NextConfig = { output: "standalone", reactStrictMode: true, distDir: ".next", }; export default nextConfig;
4. app/layout.tsx
import type { Metadata } from "next"; import { Geist, Geist_Mono } from "next/font/google"; import Header from "./components/Header"; import Footer from "./components/Footer"; import "./globals.css"; const geistSans = Geist({ variable: "--font-geist-sans", subsets: ["latin"], }); const geistMono = Geist_Mono({ variable: "--font-geist-mono", subsets: ["latin"], }); export default function RootLayout({ children, }: Readonly<{ children: React.ReactNode; }>) { return ( <html lang="en"> <body className={`${geistSans.variable} ${geistMono.variable} antialiased bg-white flex flex-col min-h-screen`} > <Header /> <main className="container flex-grow">{children}</main> <Footer /> </body> </html> ); }
已经尝试过检查路由配置和IIS的重写规则,但还是没解决,希望有经验的朋友能指点一下,万分感谢!
内容来源于stack exchange
相关产品推荐
相关产品推荐

