Как в nginx обрабатывать ссылки на кириллице

от admin

nginx

Модуль ngx_http_charset_module добавляет указанную кодировку в поле “Content-Type” заголовка ответа. Кроме того, модуль может перекодировать данные из одной кодировки в другую с некоторыми ограничениями:

  • перекодирование осуществляется только в одну сторону — от сервера к клиенту,
  • перекодироваться могут только однобайтные кодировки
  • или однобайтные кодировки в UTF-8 и обратно.
Пример конфигурации
Директивы
Синтаксис: charset кодировка | off ;
Умолчание:
Контекст: http , server , location , if в location

Добавляет указанную кодировку в поле “Content-Type” заголовка ответа. Если эта кодировка отличается от указанной в директиве source_charset, то выполняется перекодирование.

Параметр off отменяет добавление кодировки в поле “Content-Type” заголовка ответа.

Кодировка может быть задана с помощью переменной:

В этом случае необходимо, чтобы все возможные значения переменной присутствовали хотя бы один раз в любом месте конфигурации в виде директив charset_map, charset или source_charset. Для кодировок utf-8 , windows-1251 и koi8-r для этого достаточно включить в конфигурацию файлы conf/koi-win , conf/koi-utf и conf/win-utf . Для других кодировок можно просто сделать фиктивную таблицу перекодировки, например:

Кроме того, кодировка может быть задана в поле “X-Accel-Charset” заголовка ответа. Эту возможность можно запретить с помощью директив proxy_ignore_headers, fastcgi_ignore_headers, uwsgi_ignore_headers, scgi_ignore_headers и grpc_ignore_headers.

Синтаксис: charset_map кодировка1 кодировка2 < . >
Умолчание:
Контекст: http

Описывает таблицу перекодирования из одной кодировки в другую. Таблица для обратного перекодирования строится на основании тех же данных. Коды символов задаются в шестнадцатеричном виде. Неописанные символы в пределах 80-FF заменяются на “ ? ”. При перекодировании из UTF-8 символы, отсутствующие в однобайтной кодировке, заменяются на “ &#XXXX; ”.

При описании таблицы перекодирования в UTF-8, коды кодировки UTF-8 должны быть указаны во второй колонке, например:

Полные таблицы преобразования из koi8-r в windows-1251 и из koi8-r и windows-1251 в utf-8 входят в дистрибутив и находятся в файлах conf/koi-win , conf/koi-utf и conf/win-utf .

Синтаксис: charset_types mime-тип . ;
Умолчание:
Контекст: http , server , location

Эта директива появилась в версии 0.7.9.

Разрешает работу модуля в ответах с указанными MIME-типами в дополнение к “ text/html ”. Специальное значение “ * ” соответствует любому MIME-типу (0.8.29).

Синтаксис: override_charset on | off ;
Умолчание:
Контекст: http , server , location , if в location

Определяет, выполнять ли перекодирование для ответов, полученных от проксированного сервера или от FastCGI/uwsgi/SCGI/gRPC-сервера, если в ответах уже указана кодировка в поле “Content-Type” заголовка ответа. Если перекодирование разрешено, то в качестве исходной кодировки используется кодировка, указанная в полученном ответе.

Читать:
На чем пишут сайты
Синтаксис: source_charset кодировка ;
Умолчание:
Контекст: http , server , location , if в location

Задаёт исходную кодировку ответа. Если эта кодировка отличается от указанной в директиве charset, то выполняется перекодирование.

nginx не хочет работать с файлами, названия которых с русскими символами

Установил систему тикетов trac. Установил так: бакэнд apache+mod_wsgi на 8080 порту + nginx на 80 порту. Апач настроен так:

nginx настроен так:

Какая локаль системная и локаль файловой системы?

charset utf-8; # можно поместить в http, server, location, if in location

логи с ошибкой пишет только nginx:

локали что для пользователя root, что для пользователя www-data:

mod_wsgi ненужен. есть же православный uwsgi

charset utf-8; # не помог (

а ты рестартнул нжыныкс после внесения изменений в конфиг?

Проблема началась с переносом настроенной системы на новый сервер. Настройки со старого сервера (sites-avalible) я перенес один-в-один, все настройки старого сервера не могу посмотреть.

nginx и кириллица в строке запроса (rewrite)

Подскажите, как научить nginx переваривать кириллицу в строке запроса (GET)?

В частности запрос сервер получает через rewrite условие в собственном конфиге:

rewrite ^/kastingi_v_moskve_(.*) /index.php?action=castings&co=3159&ci=москва&p=$1 last;

без кириллицы работает.

Читал в доках, что надо установить кодировку в UTF-8

Но прописывание в

Если у вас есть опыт подобных манипуляций, поделитесь пожалуйста.

И ещё околотемный вопрос: у Апача можно перекинуть пользователя перманентным редиректом (302) на другой домен

Nginx, Opencart проблема с кириллицей в route=product/search

Моя голова уже вся сломалась на раздумьях о том, почему не проходит запрос в product/search на кириллице.

Opencart 2 на nginx + php-fpm.

Вбиваю русское слово в строку поиска (или прямо в адресную строку в /index.php?route=product/search&search=слово). Русское слово кодируется методом URIencode, например "погрузчик" -> "%D0%BF%D0%BE%D0%B3%D1%80%D1%83%D0%B7%D1%87%D0%B8%D0%BA"

Идет запрос /index.php?route=product/search&search=%D0%BF%D0%BE%D0%B3%D1%80%D1%83%D0%B7%D1%87%D0%B8%D0%BA

В этой строке почему то последовательности "%8?" подменяются на "_" (посмотрела в логах), соответственно, запрос превращается в /search/?search=%D0%BF%D0%BE%D0%B3%D1_%D1_%D0%B7%D1_%D0%B8%D0%BA

При раскодировании получается пустая строка, которая отправляется в базу данных, поиск ничего не находит.

Запросы на английском языке — работают. Запросы на русском языке — работают, если закодированное слово не содержит последовательностей "%8?", например, запрос "мини" пройдет.

Статические страницы с кириллицей (которые без route) — работают. На локали на http — все работает.

Related Posts