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

Mcl*_*ide 4 string cakephp param urlencode

我在CakePHP上相当新,因为有一些基本的东西,我曾经用Zend Framework做的,我用Cake打败了.

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

例如: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?

在此先感谢所有人.

Mcl*_*ide 5

我已经围绕这个问题添加了一个工作.以前回答的帖子实际上回答了为什么会发生这种情况并解决其中一个问题.会发生什么是Apache上.htaccess的解决方法有点危险,因为它会禁用安全标准.

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

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

它远非一个美丽的解决方案,但它绝对是一个实用的解决方案.