我的服务器上有静态子文件夹。 我想要的只是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路径请求编码的任何想法吗?
由于
答案 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
另请注意,如果将重写规则放在服务器或虚拟主机配置中,则需要在正则表达式匹配中的(。+)之前添加 / 。