在 NGINX 中,阿拉伯语 URL 不会重定向到 410 页面(状态代码),但英语 URL 会正确重定向到 410 页面

问题描述 投票:0回答:1

我们有一个网站和一个带有阿拉伯语和英语地址的网站。我们需要将一些带有 404 状态代码的 URL 重定向到 NGINX Web 服务中的 410 状态代码(由于 SEO)。 我们配置了 NGINX Web 服务并添加了阿拉伯语和英语 URL,英语 URL 成功重定向到状态代码 410(NGINX 错误页面),但阿拉伯语 URL 的重定向不起作用,并给用户带来了 404 错误页面的最终展示。我的问题是为什么重定向阿拉伯语 URL 不起作用,因为两种类型的 URL(阿拉伯语和英语)的配置完全相同。

示例网址: https://example.com/testhttps://example.com/

NGINX 配置文件:

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

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

文件410.redirects的内容:


/test 1;
/تست 1;

另外,我用 https://www.urlencoder.org/ 编码了阿拉伯语 URL,但它不起作用。

NGINX配置参考: https://jonathanmh.com/nginx-410-maps-and-custom-error-page/

nginx redirect arabic nginx-status
1个回答
0
投票

文件

410.redirects
包含双向文本,这最初使问题难以理解,但这不是根本问题。

变量

$request_uri
包含Nginx从浏览器接收到的原始请求。虽然浏览器会显示包含阿拉伯文本的 URL,但实际传输的是包含 url 编码字符的 URL。例如,您问题中的阿拉伯文本在
$request_uri
中显示为:

/%D8%AA%D8%B3%D8%AA

Nginx 有另一个名为

$uri
的变量,它最初设置为
$request_uri
的规范化版本。规范化过程的一部分是将 url 编码的字符解码回其原始形式。

如果您将

410.redirects
map
更改为
$request_uri
,您现有的
$uri
文件将起作用。

例如:

map $uri $is_retired_url {
    including /etc/nginx/conf.d/redirects/410.redirects;
}
© www.soinside.com 2019 - 2024. All rights reserved.