Apache RedirectMatch规则中&被转义为&的问题及解决
为什么Apache RedirectMatch会把&转义成&?如何避免?
问题根源
你遇到的&被转义成&的情况,核心原因是Apache配置文件中&是特殊字符——它被用来分隔指令的多个参数,而非URL查询字符串的一部分。当你在RedirectMatch的目标URL里直接写&时,Apache会把它当作指令参数的分隔符,而非URL的字面字符,最终生成重定向Location响应头时,这些&会被自动转义成HTML实体&。
解决方法
有两种简单的方式可以避免这个转义问题:
方法1:用反斜杠转义&
在配置里的每个&前加上反斜杠,明确告诉Apache这是一个字面字符,不是参数分隔符:
RedirectMatch ^/g/(.*) https://www.${APACHE_HOSTNAME}/folder1/?ec=$1\&ea=EBH\&el=GCC
方法2:用双引号包裹整个目标URL
把重定向的目标URL用双引号括起来,让Apache把整个字符串当作单一的URL参数处理,里面的&就会被正确识别为查询字符串的分隔符:
RedirectMatch ^/g/(.*) "https://www.${APACHE_HOSTNAME}/folder1/?ec=$1&ea=EBH&el=GCC"
验证效果
修改配置后重启Apache,再用curl访问https://www.example.com/g/1234,就能得到正确的重定向结果:
https://www.example.com/folder1/?ec=1234&ea=EBH&el=GCC
内容的提问来源于stack exchange,提问作者DaWe4444
相关产品推荐
相关产品推荐

