Перезапись ЗАКОДИРОВАННЫХ ASCII-ПРОЦЕНТОМ местоположений к их UTF-8 закодированный эквивалент

Например, “å” может быть закодирован как / %E5 и / %C3%A5 (utf-8). Все мои имена файлов являются UTF-8, таким образом, варианты ASCII возвращают 404. Я хочу, чтобы работали оба варианта.

Я попытался переписать неправильные URL к корректной кодировке с изменениями ниже конфигурации. Я не смог на самом деле соответствовать местоположениям, так не добрались нигде.

rewrite ^/%E5$ /%C3%A permanent;
rewrite ^/%25E5$ /%25C3%25A permanent;
location = /%E5 { return 301 /%C3%A; }

Как я предполагаюсь, соответствуют этим, процент закодировал местоположения?

1
задан 3 January 2015 в 21:34
1 ответ

См. здесь для той же проблемы в Apache - там я рекомендовал использовать внешнюю программу для обработки перезаписи, поскольку это неудобно делать в собственной конфигурации.

Для nginx лучшим подходом может быть встраивание некоторого Perl в вашу конфигурацию с помощью ngx_http_perl_module - используйте perl_set , чтобы установить переменную в версию $ с привязкой к UTF-8. r-> uri , используя модуль Encoding (см. здесь ), и перепишите (или, возможно, лучше, try_files ) в него.

Изменить:

Если вы хотите просто сделать это вручную для определенных URL-адресов или определенных символов, тогда вам просто не хватает пары вещей в ваших попытках:

  • Вы работаете с экранированными URL-адресами, тогда как перезапись должна быть происходит со строкой после декодирования экранированных символов
  • Вы жестко кодируете совпадения для файлов, которые являются просто специальным символом, а не файлами, которые содержат ntain специальный символ

Попробуйте что-нибудь вроде этого ..

rewrite (*UTF8)^(.*)\xe5(.*)$ %1å%2;
3
ответ дан 3 December 2019 в 18:42

Теги

Похожие вопросы