tom*_*zle 68 apache apache2 apache-config
我目前正在尝试在URL中放置一个URL.例如:
http://example.com/url/http%3A%2F%2Fwww.url2.com
我知道我必须编码URL,我已经完成了,但现在我404从服务器而不是我的应用程序收到错误.我认为我的问题在于apache,可以用AllowEncodedSlashes On指令修复.
我已经尝试将指令置于httpd.conf的底部无效,并且我不确定下一步该做什么.我把它放在正确的地方吗?如果是这样,有没有人有任何其他解决方案?
tec*_*rat 80
另外一个问题我一直在看这篇文章.让我快速解释一下.
我有相同的样式URL,也试图代理它.
示例:代理请求从/example/另一台服务器.
/example/http:%2F%2Fwww.someurl.com/
问题1: Apache认为这是一个无效的网址
解决方案:AllowEncodedSlashes On在httpd.conf中
问题2: Apache解码编码的斜杠
解决方案:AllowEncodedSlashes NoDecode在httpd.conf中(需要Apache 2.3.12+)
问题3: mod_proxy的尝试重新编码(双编码)URL变化%2F到%252F(例如/example/http:%252F%252Fwww.someurl.com/)
解决方案:httpd.conf使用ProxyPass关键字nocanon通过代理传递原始URL.
ProxyPass http://anotherserver:8080/example/ nocanon
httpd.conf文件:
AllowEncodedSlashes NoDecode
<Location /example/>
  ProxyPass http://anotherserver:8080/example/ nocanon
</Location>
参考:
Rog*_*ahl 57
此问题与Apache Bug 35256无关.而是与Bug 46830有关AllowEncodedSlashes.虚拟主机不继承该设置,并且在许多默认Apache配置中使用虚拟主机,例如Ubuntu中的配置.解决方法是AllowEncodedSlashes在<VirtualHost>容器内添加设置(/etc/apache2/sites-available/default在Ubuntu中).
错误35256:%2F将在PATH_INFO中解码(文档AllowEncodedSlashes说明不会解码)
错误46830:如果AllowEncodedSlashes On在全局上下文中设置,则虚拟主机不会继承它.您必须AllowEncodedSlashes On在每个<VirtalHost>容器中明确设置.
有关如何合并不同配置节的文档说:
部分内的
<VirtualHost>部分应用于虚拟主机定义之外的相应部分之后.这允许虚拟主机覆盖主服务器配置.
Geo*_*old 32
我也浪费了很多时间来解决这个问题.我参加聚会有点晚了,但现在似乎有一个解决方案.
根据这个线程,Apache中存在一个错误,如果你有AllowEncodedSlashes On,它会阻止404,但它会错误地解码斜杠,这根据RFC是不正确的.
这个评论提供了一个解决方案,即使用:
AllowEncodedSlashes NoDecode
鉴于所有的麻烦,我选择了base64_encoding,然后是urlencoding.它的工作原理无需使用apache服务器设置或查看错误报告.它也可以在不必将url放在查询部分中.
$enc_url = urlencode(base64_encode($uri_string));
并把它拿回来
$url = base64_decode(urldecode($enc_url));
http://example.com/admin/supplier_show/8/YWRtaW4vc3VwcGxpZXJz
http://example.com/admin/supplier_show/93/YWRtaW4vc3VwcGxpZXJzLzEwMA%3D%3D
| 归档时间: | 
 | 
| 查看次数: | 60142 次 | 
| 最近记录: |