0

コンテキスト: 私は Cakephp v2.3 を使用しており、XAMPP を実行しています。したがって、私のディレクトリ構造は次のとおりです。

C:\xampp\htdocs\cakephp\app\webroot

Cakephp にリダイレクトする ..\xampp\htdocs に .htaccess ファイルがあります (したがって、基本的に localhost と入力すると、localhost/cakephp にリダイレクトされます)。

これが私の問題の根源かもしれませんが、ケーキを機能させることができた唯一の方法です.

これを考えると、それまではすべて正常に機能していました... SSL経由でAjaxを使用して投稿しています。

問題: Ajax リクエストは https ページから発信され、別の https ページに投稿されます (したがって、ドメインの問題ではありません)。問題の兆候は、Post が「Get」に変更され、投稿されたデータがドロップされることです。リクエストを「Get」にするとうまくいきます(しかし、本当の意味でデータを投稿しているので、そうしたくありません)。両方のアクションで http を使用すると、機能します。このリダイレクトが発生しているのは、Apache が「/action」を「/cakephp/action」に書き換えているためだと思います

紛らわしい点: CakePhp before フィルターにデバッグがあり、そのメソッド (beforeFilter) にリターンを入れると、クライアント側の開発者ツールは、リクエストが Post であり、すべてのデータが存在し、サーバーの応答がデバッグ行であると表示します。ターゲット アクションの最初の行として return を配置すると、問題が発生します (IE: クライアント ツールは、要求がデータのない Get であると表示し、イニシエーターは jQuery コマンドではなくターゲット アクションです)。

これは私を混乱させます。なぜなら、それが beforeFilter に入ると、Apache がそれをリダイレクトしなくなったと仮定するからです。また、CakeBook のドキュメントによると、 beforeFilter が完了した後に呼び出される次のメソッドがターゲット アクションであると想定しています。しかし、何らかの理由で、beforeFilter の完了と targetAction の開始の間に、リクエストが /cakephp/action にリダイレクトされます。

関連コード:

.htaccess at ..\xampp\htdocs

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    ^$ cakephp/app/webroot/    [L]
   RewriteRule    (.*) cakephp/app/webroot/$1 [L]
</IfModule>

勇敢なヘルパーに前もって感謝します!

4

1 に答える 1

0

しばらく遊んで(そして他のコードを変更して)、問題の根本を発見しました。

Xampp はリダイレクトしていましたが、本当の問題は CakePhp の CSRF トークンの検証でした。AJAX (および生成されたフォームをシリアル化していない) での私の要求には、csrf トークンがありませんでした。

これは、追加することで解決されました

$this->Security->csrfCheck = false;
$this->Security->validatePost = false;

私のコントローラーで。明らかに、これらの要求を検証したいのですが、それが実際の問題を特定できた方法です。

Cake はおそらくこのケースを知らせるためにもっとうまくやるべきですが、とにかく、他の誰かが同様の状況に遭遇した場合の解決策です。

頑張ってください!

于 2013-11-18T20:49:30.873 に答える