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

NGINX中阿拉伯语URL无法跳转至410状态页问题咨询

问题:阿拉伯语URL在NGINX中无法返回410状态码

我们运营支持阿拉伯语与英语地址的网站,为优化SEO,需将部分原本返回404的URL配置为返回410状态码。配置完成后,英语URL可正常返回410错误页,但阿拉伯语URL仍返回404,两类URL的配置逻辑完全一致。我们尝试过对阿拉伯语URL进行URL编码,但问题依旧,现寻求该问题的原因及解决办法。

示例URL

  • 英语URL:https://example.com/test
  • 阿拉伯语URL:https://example.com/تست(对应URL编码:https://example.com/%D8%AA%D8%B3%D8%AA)

当前NGINX配置

主配置文件片段

map $request_uri $is_retired_url {
    include /etc/nginx/conf.d/redirects/410.redirects;
}

server {
    if ($is_retired_url) {
        return 410;
    }
}

410.redirects文件内容

/test 1;
/تست 1;

原因分析

  1. $request_uri的特性:NGINX的$request_uri变量存储的是URL编码后的原始请求路径,而配置文件中使用了未编码的阿拉伯语字符/تست,两者无法匹配。
  2. 配置文件编码问题:即使手动编码后尝试,若410.redirects文件未以UTF-8编码保存,NGINX读取时会将阿拉伯语字符解析为乱码,导致匹配失败。

解决办法

提供两种可行方案,可根据实际场景选择:

方案一:使用URL编码后的路径匹配

直接在410.redirects中写入编码后的阿拉伯语URL路径,确保与$request_uri的存储格式一致:

/test 1;
/%D8%AA%D8%B3%D8%AA 1;

注意:需验证编码的准确性,确保编码结果与请求中的路径完全对应。

方案二:改用$uri变量并确保配置文件编码为UTF-8

  1. 将410.redirects文件以UTF-8无BOM格式保存,避免字符解析乱码。
  2. 修改NGINX主配置,使用$uri变量进行匹配——$uri存储的是解码后的请求路径,可直接匹配未编码的阿拉伯语字符:
map $uri $is_retired_url {
    include /etc/nginx/conf.d/redirects/410.redirects;
}

server {
    if ($is_retired_url) {
        return 410;
    }
}

该方案更直观,适合多语言URL的管理场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:35:19