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

vql8enpb  于 2023-10-17  发布在  Nginx
关注(0)|答案(1)|浏览(116)

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

0pizxfdo

0pizxfdo1#

文件410.redirects包含双向文本,这最初使问题难以理解,但这不是根本问题。
变量$request_uri包含Nginx从浏览器接收的原始请求。虽然浏览器将显示包含阿拉伯文本的URL,但实际传输的是包含URL编码字符的URL。例如,问题中的阿拉伯语文本在$request_uri中显示为:

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

Nginx有另一个名为$uri的变量,它最初被设置为$request_uri的标准化版本。规范化过程的一部分是将url编码的字符解码回其原始形式。
如果将map$request_uri更改为$uri,则现有的410.redirects文件将工作。
举例来说:

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

相关问题