Например, “å” может быть закодирован как / %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;