В NGINX URL-адреса на арабском языке не перенаправляются на страницы 410 (код состояния), но URL-адреса на английском языке корректно перенаправляются на страницы 410.
У нас есть веб-сайт и веб-сайт с арабскими и английскими адресами. Нам необходимо перенаправить некоторые URL-адреса с кодом состояния 404 на код состояния 410 в веб-службе NGINX (из-за SEO). Мы настроили веб-службу NGINX и добавили 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;
Кроме того, я закодировал арабские URL-адреса с помощью https://www.urlencoder.org/, но это не работает.
Справочник по конфигурации NGINX:https://jonathanmh.com/nginx-410-maps-and-custom-error-page/
1 ответ
Файл содержит двунаправленный текст, что поначалу затрудняло понимание вопроса, но это не основная проблема.
Переменная содержит исходный запрос, полученный Nginx от браузера. Хотя браузер отобразит URL-адрес, содержащий текст на арабском языке, на самом деле передается URL-адрес, содержащий символы, закодированные в URL-адресе. Например, арабский текст в вашем вопросе выглядит следующим образом:
/%D8%AA%D8%B3%D8%AA
В Nginx есть еще одна переменная, для которой изначально задана нормализованная версия . Частью процесса нормализации является декодирование символов, закодированных в URL-адресе, обратно в их исходную форму.
Ваш существующий410.redirects
файл будет работать, если вы изменитеmap
от$request_uri
к$uri
.
Например:
map $uri $is_retired_url {
including /etc/nginx/conf.d/redirects/410.redirects;
}