2011-01-20 3 views
4

私はCakePHPについてかなり新しくなっています。そのため、私がCakeで叩いたZend Frameworkの基本的なことがいくつかあります。CakePHPのコントローラ/アクションにurlencodeされたURLを渡す

私は、名前付きパラメータをコントローラ/アクションに渡す必要があるプロジェクトに取り組んでいます。ルートを設定してパラメータを渡すのは簡単ですが、パラメータが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がパラメタとしてurlencodeされた文字列を受け入れないのか、なぜそれが404を投げるのですか?

ありがとうございました。

答えて

5

この問題を回避する方法を追加しました。ポストを指していた以前の答えは、なぜそれが起こっていたのか、解決策の1つに実際に答えました。 Apache上の.htaccessの回避策は、セキュリティ基準を無効にするため、少し危険です。

2つのコードを経由して、これをうまくする方法(と私は両方を使用しています)があります

  1. はbase64でエンコードされた文字列など、すべてのURL
  2. はparamsというようなURLを受け入れ、しかし、あなたのように送りますhttp://をhttp:/に変換することに気づくでしょう。これがいつ発生するのかを正確に特定してから、その文字列を修正する必要があります。

これは美しい解決策ではありませんが、実用的な解決策です。

+0

[URLでBase64でエンコードされた文字列を渡す](http://stackoverflow.com/questions/1374753/passing-base64-encoded-strings-in-url)の回答を見てみる価値があります。 – drmonkeyninja

関連する問題