.htaccess删除Base64编码的URL符号

3
我最近才注意到这个问题。我使用urlencode对base64编码进行编码,以便通过url发送加密图像链接,因此在url中有一些%2B,即+符号。
当我通过php中的GET访问这个url时,需要将%2B转换回+符号。
image.php?q={encoded}

当我使用 $_GET['q'] 时,我会得到正确的数据,而无需进行 URL 解码,例如 %2B 将被翻译为 + 等等...

但是最近我写了一个 .htaccess 文件,像这样:

 RewriteRule ^image/(.*)?$ image.php?q=$1 [NC,L]

当我获取 $_GET['q'] 数据时,所有的 %2B 都被替换成了空格等字符,所以我需要运行

str_replace(' ','+',$_GET['q']) 

然后解密以获取图像链接..

这是为什么发生的?我需要在htaccess中设置一些默认标准吗?非常感谢帮助!

1个回答

1
重写规则确实会使用百分号编码序列对URL进行解码,解码后的字符串将再次放入查询字符串中,"%2B"现在变成了"+",PHP将它们解码为" "(空格)。
mod_rewrite有一个标志可以处理这个问题:B 请参阅文档:http://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接