Réécrire les locations codés en pourcentage ASCII à leur équivalent codé UTF-8

Par exemple, "å" peut être codé sous /% E5 et /% C3% A5 (utf-8). Tous mes noms de files sont UTF-8, donc les variantes ASCII renvoient un 404. Je souhaite que les deux variantes fonctionnent.

J'ai essayé de réécrire les URL incorrectes aux enencodings corrects avec des variantes de la configuration ci-dessous. Je n'ai pas réussi à faire correspondre les locations, donc je n'ai pas eu de place.

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

Comment suis-je censé correspondre à ces locations codés en pourcentage?

One Solution collect form web for “Réécrire les locations codés en pourcentage ASCII à leur équivalent codé UTF-8”

Voyez ici pour le même problème dans Apache – là, j'ai recommandé l'utilisation d'un programme externe pour gérer la réécriture, car il est difficile de le faire en configuration native.

Pour nginx, la meilleure approche pourrait être d'intégrer un certain perl dans votre configuration via ngx_http_perl_module – utilisez perl_set pour définir une variable sur une version UTF-8 de $r->uri , en utilisant le module Encoding (voir ici ) et réécrire (ou probablement mieux, try_files ) à cela.

Modifier:

Si vous souhaitez simplement le faire à la main pour des URL spécifiques ou des caractères spécifiques, alors vous manquez quelques choses dans vos tentatives:

  • Vous travaillez contre les URL échappées, alors que la réécriture devrait se produire contre la string après déencoding des caractères échappés
  • Vous êtes en train de coder les correspondances pour les files qui ne sont que le caractère spécial, et non les files contenant le caractère spécial

Essayez quelque chose comme ça …

 rewrite (*UTF8)^(.*)\xe5(.*)$ %1å%2; 
  • problème d'exécution d'un script bash avec encoding utf8
  • Comment savoir si un terminal prend en charge UTF-8
  • i 7.5 ne fournira pas de caractères coréens dans mon application asp classique
  • La vitesse d'écriture / lecture est-elle affectée par le nom des files?
  • Comment Apache peut-il servir des files avec des caractères utf-8?
  • Les parameters régionaux échouent définitivement sur la machine VPS Ubuntu server 16.04
  • Le nom de fichier Ext3 est-il limité à 255 symboles ou 255 octets?
  • LINUX: un file qui est affiché sous forme de text ASCII contient des données UTF-8
  • installez mysql client et mysql-server avec default charset utf8 à fedora 11
  • Support Mongo Client RedHat EL5 UT8 Support
  • Comment get les parameters régionaux du système dans Windows 7 cmd?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de rĂ©seau.