2011-01-20 4 views
4

저는 CakePHP에 대해 상당히 새로운 기능을 제공합니다. 따라서 Zend Framework와 관련하여 Cake를 사용하여 익숙한 몇 가지 기본적인 것들이 있습니다.URL로 인코딩 된 URL을 CakePHP의 컨트롤러/액션에 전달합니다.

나는 명명 된 매개 변수를 컨트롤러/동작에 전달해야하는 프로젝트에서 작업하고 있습니다. 경로를 설정하고 매개 변수를 전달하는 것은 매우 간단합니다. 내 문제는 매개 변수가 URL 인코딩 된 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가 매개 변수로 urlencode 된 문자열을 받아들이지 않고 왜 404를 던지나요?

미리 감사드립니다.

답변

5

이 문제점에 대한 해결 방법이 추가되었습니다. 포스트를 지적한 이전의 대답은 실제로 그것이 일어났던 이유와 해결책 중 하나에 실제로 대답했습니다. Apache에서 .htaccess의 해결 방법은 보안 기준을 사용할 수 없기 때문에 약간 위험합니다. 당신 같이

  1. 이름 PARAMS로 URL을 수락 base64로 인코딩 된 문자열로 모든 URL을 보내지 만 :

    이 (내가 모두를 사용하고 있습니다) 코드를 통해이 문제를 해결하는 두 가지 방법 http : //를 http : /로 변환한다는 사실을 알게 될 것이므로, 언제 이런 일이 일어나는지 정확하게 식별하고 문자열을 수정해야합니다.

이것은 아름다운 해결책이 아니지만 실용적인 해결책입니다.

+0

[URL에서 base64로 인코딩 된 문자열 전달] (http://stackoverflow.com/questions/1374753/passing-base64-encoded-strings-in-url)에 대한 답변을 살펴 보는 것이 좋습니다. – drmonkeyninja