Veja aqui para o mesmo problema no Apache - lá, eu recomendei usar um programa externo para lidar com a reescrita, já que é complicado fazer isso na configuração nativa.
Para nginx, a melhor abordagem pode ser incorporar algum perl em sua configuração via ngx_http_perl_module
- use perl_set
para definir uma variável para uma versão UTF-8-ified de $r->uri
, usando o módulo Encoding
(veja aqui ), e reescreva (ou provavelmente melhor, try_files
) para isso.
Editar:
Se você quiser fazer isso apenas manualmente, para URLs específicos ou caracteres específicos, você está perdendo algumas coisas nas suas tentativas:
- Você está trabalhando contra URLs com escape, enquanto a reescrita deve estar acontecendo contra a string depois de decodificar os caracteres com escape
- Você está codificando as correspondências para os arquivos que são apenas o caractere especial, não os arquivos que contêm o caractere especial
Tente algo assim ...
rewrite (*UTF8)^(.*)\xe5(.*)$ %1å%2;