2011-11-27 125 views
0

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

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

感谢

回答

2

您可以使用RewriteMapINT(内部函数)来创建一个UNESCAPE地图(虽然它被称为 “越狱”)。由于这是一个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

另外请注意,如果你把重写规则您的服务器或虚拟主机的配置里面,你需要前添加/正则表达式匹配中的(。+)