Например, «å» можно закодировать как /% 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; }
Как я могу сопоставить эти процентные закодированные местоположения?
Видеть Вот для той же проблемы в Apache - там я рекомендовал использовать внешнюю программу для обработки перезаписи, так как это неуклюже делать в собственной конфигурации.
Для nginx лучшим подходом может быть встраивание некоторого Perl в вашу конфигурацию через ngx_http_perl_module
- использовать perl_set
чтобы установить переменную в версию UTF-8 $r->uri
, используя Encoding
модуль (см. Вот) и перепишите (или, возможно, лучше, try_files
) к этому.
Редактировать:
Если вы хотите просто сделать это вручную для определенных URL-адресов или определенных символов, тогда вам просто не хватает пары вещей в ваших попытках:
Попробуйте что-нибудь подобное ..
rewrite (*UTF8)^(.*)\xe5(.*)$ %1å%2;