当前位置

百度对网址中查询参数二次编码的问题

James Qi 在 2021年12月17日 - 17:14 提交

最近同事从访问日志和统计分析中发现有一些400报错和一些错误网页,我们自己访问也打不开,是网址有问题,我翻看了以前写的博客《百度对网址二次编码的问题》,问题很类似。

以前的错误网址:

https://tw.chahaoba.com/%25E8%25AE%25A8%25E8%25AE%25BA:80004911

.htaccess中写的跳转规则:

RewriteCond %{REQUEST_URI} ^(.*)%(.*)$
RewriteRule ^.*$ https://%{HTTP_HOST}%1%%2 [L,R=301,NE]

但这次二次编码不是出现在REQUEST_URI中而是出现在QUERY_STRING中,所以以前在.htaccess中写的跳转规则还不起作用。

这次遇到的错误网址:

https://tw.chahaoba.com/index.php?action=edit&redlink=1&title=%25E8%25AE%25A8%25E8%25AE%25BA:80004911

于是查了一些资料,发现QUERY_STRING中的%需要写为\%25,否则可能引起循环重定向。修改写法后就可以了,如下:

RewriteCond %{REQUEST_URI} ^\/index\.php$
RewriteCond %{QUERY_STRING} ^(.*)title=(.*)\%25(.*)$
RewriteRule ^.*$ /index.php?%1title=%2%%3 [L,R=301,NE]

从Chrome浏览器的Network调试模式可以看到跳转过程:

跳转了6次:

https://tw.chahaoba.com/index.php?action=edit&redlink=1&title=%25E8%25AE%25A8%25E8%25AE%25BA:80004911p0
https://tw.chahaoba.com/index.php?action=edit&redlink=1&title=%25E8%25AE%25A8%25E8%25AE%BA:80004911p0
https://tw.chahaoba.com/index.php?action=edit&redlink=1&title=%25E8%25AE%25A8%25E8%AE%BA:80004911p0
https://tw.chahaoba.com/index.php?action=edit&redlink=1&title=%25E8%25AE%25A8%E8%AE%BA:80004911p0
https://tw.chahaoba.com/index.php?action=edit&redlink=1&title=%25E8%25AE%A8%E8%AE%BA:80004911p0
https://tw.chahaoba.com/index.php?action=edit&redlink=1&title=%25E8%AE%A8%E8%AE%BA:80004911p0
https://tw.chahaoba.com/index.php?action=edit&redlink=1&title=%E8%AE%A8%E8%AE%BA:80004911p0

每次把一个%25转为%,直到6个%25都转为%

“讨论”两个汉字
url编码成为6个字节:%E8%AE%A8%E8%AE%BA
被百度再次编码成为错误的:%25E8%25AE%25A8%25E8%25AE%25BA

我们现在在.htaccess里面设置urlrewrite还原就可以了👌

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。