Regex Apache将ascii编码为utf8
我的服务器上有静态子文件夹。 我只想让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路径编码吗Regex Apache将ascii编码为utf8,regex,apache,mod-rewrite,apache-config,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路径编码吗 谢谢您可以使用RewriteMap和int(内部函数)创建一个unescape映射(尽管它被称为“esc
谢谢您可以使用
RewriteMap
和int(内部函数)创建一个unescape映射(尽管它被称为“escape”)。由于这是一个重写映射,它需要位于服务器配置(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
还要注意,如果将重写规则放入服务器或virtualhost配置中,则需要在正则表达式匹配中的(.+)之前添加一个/