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

使用iisnode在IIS部署SvelteKit时,sitemap.xml无法访问的问题

问题分析与解决方案

核心错误点

  1. 重写规则顺序错误:当前node规则匹配所有URL(.*)且未设置stopProcessing="true",会优先拦截所有请求(包括sitemap.xml),导致后续的SiteMap规则完全无法执行。
  2. SiteMap规则配置无效:原规则将请求重写回/sitemap.xml,形成无效循环,没有让IIS直接处理静态文件请求。

修正后的web.config配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <iisnode nodeProcessCommandLine="&quot;C:\Program Files\nodejs\node.exe&quot;" watchedFiles="web.config;*.js;*.cjs" />  
    <handlers>
      <!-- 确保静态文件处理器优先级高于iisnode -->
      <add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
      <add name="iisnode" path="server.cjs" verb="*" modules="iisnode" />
    </handlers>
    <rewrite>
      <rules>
        <!-- HTTPS跳转规则放在最前 -->
        <rule name="HTTPS Redirect" enabled="true" stopProcessing="true">
          <match url="(.*)" />
          <conditions>
            <add input="{HTTPS}" pattern="^OFF$" />
          </conditions>
          <action type="Redirect" url="https://{HTTP_HOST}{REQUEST_URI}" appendQueryString="false" />
        </rule>
        <!-- 优先处理sitemap.xml,直接返回静态文件 -->
        <rule name="SiteMap" stopProcessing="true">
          <match url="^sitemap.xml$" />
          <action type="None" />
        </rule>
        <!-- 其余请求转发给node.js处理 -->
        <rule name="node">
          <match url=".*" />
          <action type="Rewrite" url="server.cjs" />
        </rule>
      </rules>
      <outboundRules>
        <rule name="back">
            <match serverVariable="RESPONSE_Location" pattern="(.*)/server.cjs" />
            <action type="Rewrite" value="{R:1}" />
        </rule>
      </outboundRules>
    </rewrite>
    <httpProtocol>
      <customHeaders>
        <!-- security headers here -->
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

关键修改说明

  • 调整规则顺序:将HTTPS跳转、SiteMap规则置于node规则之前,确保特定请求先被处理。
  • 优化SiteMap规则:设置action type="None"并开启stopProcessing="true",让IIS直接返回根目录下的sitemap.xml静态文件,不再转发给node.js。
  • 提升静态文件处理器优先级:在handlers中添加StaticFile处理器并放在iisnode之前,确保IIS优先识别并处理静态文件。

额外检查项

  • 确认sitemap.xml文件存在于网站根目录(与web.config、server.cjs同目录)。
  • 确保IIS的静态文件功能已启用(服务器管理器→Web服务器→添加角色和功能→勾选静态文件)。
  • 检查文件权限:确保IIS应用池身份对sitemap.xml拥有读取权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 02:02:03