2011-01-20 63 views
4

我在CakePHP上相當新穎,因此,我用Zend Framework做了一些基本的事情,我用Cake打了個蛋。將一個urlencoded URL作爲參數傳遞給CakePHP的控制器/動作

我正在處理一個項目,我必須將一個命名參數傳遞給控制器​​/操作。設置路由並傳遞參數非常簡單,我的問題是當參數是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?

感謝所有提前。

回答

5

我已經添加了一個解決此問題的工作。以前的答覆指出,一個職位實際上回答了爲什麼發生和解決方案之一。會發生什麼是Apache的.htaccess解決方法有點危險,因爲它會禁用安全標準。

有2種方式通過代碼來工作了這一點(我同時使用):

  1. 發送的所有網址以Base64編碼字符串
  2. 接受網址作爲命名參數,可以,但你會注意到,它會將任何http://轉換爲http:/,因此有必要正確識別何時發生這種情況,然後才能糾正該字符串。

它遠非一個美麗的解決方案,但它絕對是一個實際的解決方案。

+0

也許值得看看[在URL中傳遞base64編碼的字符串]的答案(http://stackoverflow.com/questions/1374753/passing-base64-encoded-strings-in-url)。 – drmonkeyninja 2016-01-06 11:53:58

相關問題