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

Azure Web App含空格编码的URL触发404/500错误求解决

解决Azure Web App URL重写编码问题的思路

1. 调整重写规则的解码行为

IIS默认会提前解码URL中的特殊字符,导致+或%20在重写前被篡改,引发404/500错误。修改重写规则,添加decodeUrl="false"保留原始编码,同时开启appendQueryString="true"传递查询参数:

<rewrite>
    <rules>
      <rule name="All to root" stopProcessing="true">
        <match url="(.*)" decodeUrl="false" />
        <action type="Rewrite" url="index.php" appendQueryString="true" />
      </rule>
    </rules>
</rewrite>

2. 允许IIS处理编码后的特殊字符

默认IIS会拦截包含%20的路径请求(视为非法字符),导致500错误。在web.config的<system.webServer>节点下添加请求过滤配置,允许双重转义:

<security>
  <requestFiltering allowDoubleEscaping="true">
    <requestLimits maxUrl="4096" maxQueryString="2048" />
  </requestFiltering>
</security>

3. 修正PHP的请求路径获取逻辑

确保PHP代码通过$_SERVER['REQUEST_URI']获取原始请求路径,而非$_SERVER['PATH_INFO']或$_SERVER['REQUEST_PATH']——IIS重写后会修改这些变量的值,导致路径解析错误。

4. 兼容路径中的+号(可选)

如果需要让IIS将路径中的+视为空格(和Apache行为一致),可以添加前置重写规则替换+为%20:

<rewrite>
    <rules>
      <rule name="Replace plus with space" stopProcessing="false">
        <match url="^(.*)\+(.*)$" />
        <action type="Rewrite" url="{R:1}%20{R:2}" />
      </rule>
      <rule name="All to root" stopProcessing="true">
        <match url="(.*)" decodeUrl="false" />
        <action type="Rewrite" url="index.php" appendQueryString="true" />
      </rule>
    </rules>
</rewrite>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:41:10