バックエンドとして CakePHP を使用し、フロントエンド フレームワークとして AngularJS を使用してアプリを構築しています。
必要な JSON を提供できるように、フロントエンド コードと同じサーバーに CakePHP を配置する必要があります。
通常、CakePHP には webroot フォルダーがあり、js/css/less/* の他に、CakePHP にフックする index.php があります。ただし、AngularJS を追加すると、index.html も必要になるため、複雑さが増します。
これが私が望む制御フローです:
- ユーザーが domain.com/ にアクセスすると、index.html が表示されます (ただし、ルートは「*.com/」のままです!)
- ユーザーが domain.com/#/home にアクセスした場合、index.html を表示し、Angular にハッシュ ルートを処理させます。
- ユーザーが domain.com/about にアクセスした場合 (about ページ、html などすべてが CakePHP によって提供されていると仮定します)、index.php に送信します。
- domain.com/users/list.json で AJAX 呼び出しを行う場合、CakePHP が JSON を提供できるように index.php を使用します。
したがって、.htaccess ルールでこれを処理できると考えました。しかし、何を書いたらよいのかよくわかりません。
今私は持っています:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d #if it's not an existing directory
RewriteCond %{REQUEST_FILENAME} !-f #if it's not an existing file
RewriteRule ^(.*)$ index.php?/$1 [QSA,L] #everything else, send to CakePHP
</IfModule>
何か案は?
のような最後の条件の後に行を追加するのと同じくらい簡単でしょうRewriteRule / index.html [L]
か?
また、CakePHP と AngularJS を使用した別のセットアップを提案してください。
ありがとう!
EDIT:AngularJSに使用しているビルドシステムと、「home.ctp」ビューから提供するだけで問題が発生する理由について詳しく説明したいと思います。
テスト、連結、醜化、および index.html へのスクリプトのインクルードに使用してng-boilerplate
います。karma
grunt
モジュール構造を維持できるので、ビルドシステムは本当に美しいと思います。
ng-boilerplate
典型的なフロントエンドのディレクトリ構造は次のとおりです。
ng-boilerplate/
|- build/ # Development build
| | index.html
| | assets/
| |
| |- angular/
|- grunt-tasks/
|- karma/
|- src/ # Actual source code I'm editing
| |- app/
| | |- <app logic>
| |- assets/
| | |- <static files>
| |- common/
| | |- <reusable code>
| |- less/
| | |- main.less
|- vendor/
| |- angular-bootstrap/
| |- bootstrap/
| |- placeholders/
|- build.config.js # Build configuration specific to app
|- Gruntfile.js
|- module.prefix
|- module.suffix
|- package.json
(これらのディレクトリとフォルダーの詳細については、こちら: https://github.com/joshdmiller/ng-boilerplate )
home.ctp
index.html を編集するたびに、最新の「ビルド」(開発中) を取得し、手動で index.html ファイルを配置する必要があるため、これは難しいワークフローになります。
これが、私の頭が最初に .htaccess に向かった理由です。ただし、AngularJS を使用するのではなく、CakePHP から直接ページを提供したい場合、このアイデアには独自の制限があることを理解しています。
おそらく、CakePHP のhome.ctp
ビューに index.html を配置するようにビルド システムを構成できます。このソリューションに関するアイデアはありますか?