有一个客户端,其中包含大量标识符。我们在URL中使用这些标识符。 (为什么他们的软件允许SKU编号中的特殊字符是另一天的问题。)IE和边缘点击时将%2F转换为%252F
使用Apache 2.4,AllowEncodedSlashes设置NoDecode并正常工作。但是,在IE和Edge中的某些客户端计算机上(如果问题出现在两者中),单击链接时,甚至粘贴到地址栏中,都可以看到它将%2F更改为%252F 。
在这些机器上,Chrome和Firefox工作正常。
样品网址:(正确)
https://www.grandbrass.com/item/bb0-5%2F8x4%2F36/balls-round_solid_turned_metal_balls/
变为:(不正确)
https://www.grandbrass.com/item/bb0-5%252F8x4%252F36/balls-round_solid_turned_metal_balls/
在这些机器上,这是一致的。
AFAIK这是在浏览器中立即发生的。
我怀疑这是与页面编码和客户端的语言设置或类似的东西有关,但我甚至无法开始猜测问题可能是什么。
这里是一个链接到(低质量)视频显示它发生。 https://recordings.join.me/oM6XCRZ_0kOYuEn9OjtWAg
**更新**
似乎有什么东西在服务器上mod_rewrite的事情。为什么它只影响Edge和IE在某些机器上尚不清楚,但我可以在Chrome中复制它。
看来,如果任何其中有%2F的URL触发了一个mod_rewrite规则,那么此时%2F将被%252F替换。
例如,有一个规则来添加结尾斜线如果丢失:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !\..+$
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ $1/ [R=301,L]
所以此工程: https://www.grandbrass.com/item/crb1-1%2F8x8/checkrings-plated_steel_checkrings/
这(注缺乏斜线的)不会: https://www.grandbrass.com/item/crb1-1%2F8x8/checkrings-plated_steel_checkrings
我到底是什么了在第二种情况是(注意添加斜线和翻译%2F): https://www.grandbrass.com/item/crb1-1%252F8x8/checkrings-plated_steel_checkrings/
这是造成的问题,因为在PHP中,我最终将crb1-1 // F8x8作为不是有效项目代码的值。
我试过了,它没有工作。 %2F不是空格,它是斜杠。它适用于大多数系统,只是不是一些IE和Edge浏览器。 AFAIK它在浏览器中执行它,而不是整个跳到服务器。 –