Apache编码ascii到utf8

时间:2011-11-27 10:30:44

标签: regex apache mod-rewrite apache-config

我的服务器上有静态子文件夹。 我想要的只是Apache以正确的方式转发它们。 使用普通的英文子文件夹,我没问题。 example.com/asd - > / SRV / FDR / ASD。 当请求包含非ascii字母时,它会像这样转换它们Büc - > B%C3%BCc,而我的文件夹名为/ srv / fdr /Büc(在utf8中),Apache将其转发到/ srv / fdr / B%C3%BCc。

有关如何更改URL路径请求编码的任何想法吗?

由于

1 个答案:

答案 0 :(得分:2)

您可以使用RewriteMap int (内部函数)来创建一个unescape地图(虽然它叫做“escape”)。由于这是一个RewriteMap,它需要在服务器配置(httpd.conf)或虚拟主机配置中:

RewriteMap unescape int:escape

现在,您可以在反向引用中使用 $ {unescape:} 。因此,如果要匹配已转义字符的URI,则可以将反向引用包装在其中以便进行转换。例如:

# Need this to avoid rewrite-looping
RewriteCond %{REQUEST_URI} !^/srv/fdr
RewriteRule ^(.+)$ /srv/fdr/${unescape:$1} [L,NE]

这将获取URI /B%C3%BCc并将其重写为/srv/fdr/Büc

另请注意,如果将重写规则放在服务器或虚拟主机配置中,则需要在正则表达式匹配中的(。+)之前添加 /