将ASCII百分比编码的位置重写为其UTF-8编码的等效项

例如,“å”可以编码为/%E5和/%C3%A5(utf-8)。 所有我的文件名是UTF-8,所以ASCII变种返回一个404。我希望这两个变种工作。

我试着用不同的下面的configuration将不正确的URL改写成正确的编码。 我没有能够真正匹配的位置,所以没有得到任何地方。

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

我该如何匹配这些百分比编码位置?

在这里看到同样的问题,在Apache中 – 我build议使用外部程序来处理重写,因为在本地configuration中执行它很笨拙。

对于nginx,最好的方法是通过ngx_http_perl_moduleembedded一​​些Perl到你的configuration中 – 使用perl_set将variables设置为$r->uri的UTF-8版本,使用Encoding模块(见这里 ),然后重写(或者更好, try_files )。

编辑:

如果你想只是手动为特定的URL或特定的字符做这个,那么你只是在尝试中错过了一些东西:

  • 您正在处理转义的URL,而重写应该在解码转义字符后针对string发生
  • 您将匹配硬编码为 包含特殊字符的文件,而不包含包含特殊字符的文件

尝试这样的事情

 rewrite (*UTF8)^(.*)\xe5(.*)$ %1å%2;