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

如何在Azure App Service的web.config中禁用API路径自动解码?

解决Azure App Service自动解码URL中%2F导致的404问题

Azure App Service基于IIS运行Node.js应用时,IIS默认会自动解码URL中的转义字符(比如%2F会被解析为/),这会导致你原本的路由project/test%2Fxyz被修改为project/test/xyz,和预期路由不匹配,最终返回404错误。

要禁用这种自动解码行为,你需要修改部署到Azure的web.config文件,通过以下配置实现:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <!-- 允许转义的/(%2F)通过,禁用自动解码 -->
    <security>
      <requestFiltering allowDoubleEscaping="true">
        <requestPathInvalidCharacters>
          <!-- 移除默认禁止的/和\,允许它们以转义形式出现在URL中 -->
          <remove char="/" />
          <remove char="\" />
        </requestPathInvalidCharacters>
      </requestFiltering>
    </security>

    <!-- 配置URL重写,将完整请求路径传递给Node.js入口文件 -->
    <rewrite>
      <rules>
        <rule name="Node.js Routes" stopProcessing="true">
          <match url="(.*)" />
          <conditions logicalGrouping="MatchAll">
            <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
          </conditions>
          <action type="Rewrite" url="server.js" /> <!-- 替换为你的Node.js入口文件名 -->
        </rule>
      </rules>
    </rewrite>

    <!-- 配置iisnode处理Node.js请求 -->
    <handlers>
      <add name="iisnode" path="server.js" verb="*" modules="iisnode" /> <!-- 同步替换入口文件名 -->
    </handlers>
  </system.webServer>
</configuration>

关键配置说明:

  • allowDoubleEscaping="true":允许URL中包含转义后的特殊字符,阻止IIS自动解码%2F这类转义序列。
  • 移除requestPathInvalidCharacters中的/和\:默认IIS会拒绝包含这些字符的请求,移除后允许转义版本的%2F通过。
  • URL重写规则:确保所有非静态文件/目录的请求都转发到Node.js入口文件,并且保留原始URL路径,让Node.js应用自行处理路由匹配。

注意:请将配置中的server.js替换为你实际的Node.js应用入口文件名(比如app.js)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:40:32