我正在使用 CakePHP 作为我的后端和 AngularJS 作为我的前端框架来构建一个应用程序。
我需要将 CakePHP 与我的前端代码放在同一台服务器上,以便它可以提供我需要的 JSON。
通常在 CakePHP 中,有一个 webroot 文件夹,除了 js/css/less/* 之外,还有一个 index.php 与 CakePHP 挂钩。但是,添加 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 调用,请使用 index.php,以便 CakePHP 可以提供 JSON。
所以我的想法是我可以让 .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 的替代设置。
谢谢!
编辑:我想提供更多关于我用于 AngularJS 的构建系统的信息,以及为什么它会导致仅从“home.ctp”视图提供服务的问题。
我正在使用ng-boilerplate
whichkarma
用于测试和grunt
连接、丑化以及在 index.html 中包含脚本。
我认为构建系统真的很漂亮,因为它允许我保持模块化结构。
这是典型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。不过,我知道如果我确实想直接从 CakePHP 提供页面而不是将 AngularJS 引入图片,那么这个想法有其自身的局限性。
也许我可以配置构建系统以将 index.html 放在 CakePHP 的home.ctp
视图中。关于这个解决方案的任何想法?