如何在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
相关产品推荐
相关产品推荐

