В 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;
}
Другие вопросы по тегам