将 urlencoded URL 作为参数传递给 CakePHP 的控制器/操作

2023-12-03

我对 CakePHP 相当陌生,因此,我以前用 Zend Framework 做的一些基本事情被 Cake 打败了。

我正在开发一个项目,我必须将命名参数传递给控制器​​/操作。设置路由并传递参数相当简单,我的问题是当参数是 urlencoded url 时。

例如:http://www.cakephp.com/controller/action/http%3A%2F%2Fwww.google.com无论控制器和操作设置如何,都会抛出 404,但传递 /controller/action/http://www.google.com 以某种方式工作,唯一的问题是它将 http 标识为命名参数。换句话说,如果我这样做 /controller/action?url=http://www.google.com 它将起作用。

我为此使用的解决方法是将值作为 base64 编码字符串传递,但它带来了一些限制。例如,如果它是一个API,则无法保证使用该API的系统可以对字符串进行base64编码。

无论如何,最好的解决方案仍然是将 url 编码的字符串传递给命名参数。问题是,为什么 CakePHP 不接受 urlencoded 字符串作为参数,并且为什么它会抛出 404?

预先感谢大家。


我已经添加了解决此问题的方法。之前指向帖子的答案实际上回答了发生这种情况的原因以及解决方案之一。所发生的情况是,Apache 上 .htaccess 的解决方法有点危险,因为它会禁用安全标准。

有两种方法可以通过代码解决这个问题(我正在使用这两种方法):

  1. 将所有 url 作为 base64 编码字符串发送
  2. 接受 url 作为命名参数,但是,您会注意到,它将任何 http:// 转换为 http:/,因此有必要正确识别何时发生这种情况,然后才更正字符串。

它远不是一个漂亮的解决方案,但它绝对是一个实用的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 urlencoded URL 作为参数传递给 CakePHP 的控制器/操作 的相关文章