我们有一个网站和一个阿拉伯语和英语地址的网站。我们需要在NGINX Web服务中将一些带有404状态代码的URL重定向到410状态代码(由于SEO)。我们配置了NGINX Web服务并添加了阿拉伯语和英语URL,英语URL成功重定向到状态码410(NGINX错误页面),但阿拉伯语URL的重定向不起作用,并给用户带来了404错误页面的最终显示。我的问题是为什么重定向阿拉伯语URL不起作用,因为两种类型的URL(阿拉伯语和英语)的配置完全相同。
示例URL:https://example.com/test和https://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/
1条答案
按热度按时间0pizxfdo1#
文件
410.redirects
包含双向文本,这最初使问题难以理解,但这不是根本问题。变量
$request_uri
包含Nginx从浏览器接收的原始请求。虽然浏览器将显示包含阿拉伯文本的URL,但实际传输的是包含URL编码字符的URL。例如,问题中的阿拉伯语文本在$request_uri
中显示为:Nginx有另一个名为
$uri
的变量,它最初被设置为$request_uri
的标准化版本。规范化过程的一部分是将url编码的字符解码回其原始形式。如果将
map
从$request_uri
更改为$uri
,则现有的410.redirects
文件将工作。举例来说: