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

如何将IIS返回400错误的错误URL重定向至正确页面

错误URL重定向解决方案

问题核心是%0D属于ASCII控制字符(回车符),多数服务器会直接拦截这类请求并返回400错误,常规重写规则可能无法触发,需要针对性配置:

Apache服务器

  1. 先允许服务器接收含控制字符的请求,在.htaccess或httpd.conf中添加:
AllowEncodedSlashes NoDecode
AcceptPathInfo On
  1. 配置重定向规则:
RewriteEngine On
# 仅针对该页面的重定向
RewriteRule ^my-page/%0D$ /my-page [R=301,L]
# 或者通用匹配所有以%0D结尾的路径
# RewriteRule ^(.*)/%0D$ /$1 [R=301,L]

Nginx服务器

有两种处理方式:

方式1:允许请求后重写

在server块中添加配置,允许控制字符请求,再设置重写:

server {
    # 允许控制字符相关配置
    server_name_in_redirect off;
    underscores_in_headers on;

    # 重定向规则
    rewrite ^/my-page/%0D$ /my-page permanent;
    # 通用匹配可替换为:rewrite ^(.*)/%0D$ /$1 permanent;
}

方式2:捕获400错误后跳转

如果不想修改全局请求规则,可通过错误页捕获400后判断URL跳转:

error_page 400 @handle400;
location @handle400 {
    if ($request_uri ~* "^/my-page/%0D") {
        return 301 /my-page;
    }
    # 其他400错误保持原处理
    return 400;
}

IIS服务器

  1. 打开IIS管理器,进入目标站点的「请求过滤」→「编辑功能设置」,勾选「允许双重转义」并保存。
  2. 添加URL重写规则:
    • 匹配URL模式:^my-page/%0D$
    • 操作类型:重定向
    • 重定向URL:/my-page
    • 状态代码:301永久重定向

或者直接编辑web.config:

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true" />
    </security>
    <rewrite>
        <rules>
            <rule name="Fix CR in URL" stopProcessing="true">
                <match url="^my-page/%0D$" />
                <action type="Redirect" url="/my-page" redirectType="Permanent" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

额外提示

  • 优先使用301永久重定向,让浏览器缓存规则,减少后续错误请求。
  • 测试前清除浏览器缓存,避免旧缓存干扰结果。
  • 若使用CDN(如Cloudflare),可直接在CDN层配置页面规则,匹配错误URL后重定向到正确地址,无需修改源服务器配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 13:45:32