Wil*_*l M 4 .htaccess cakephp angularjs
我正在构建一个应用程序,CakePHP作为我的后端,AngularJS作为我的前端框架.
我需要在与前端代码相同的服务器上安装CakePHP,以便它可以提供我需要的JSON.
通常在CakePHP中,一个有webroot文件夹,除了js/css/less/*之外,还有一个挂钩到CakePHP的index.php.但是,添加AngularJS会增加一些复杂性,因为我还想要一个index.html.
这是我想要的控制流程:
所以我的想法是我可以.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>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
它会像在最后一个条件之后添加一行一样简单RewriteRule / index.html [L]吗?
另外,请随意使用CakePHP和AngularJS建议替代设置.
谢谢!
编辑:我想提供更多关于我用于AngularJS的构建系统的信息,以及为什么它只是从'home.ctp'视图提出问题.
我正在使用ng-boilerplate哪些karma用于测试和grunt连接,uglifying,以及在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
Run Code Online (Sandbox Code Playgroud)
(这里有关于这些目录和文件夹的更多信息:https://github.com/joshdmiller/ng-boilerplate)
这使得工作流程变得困难,因为我必须采用最新的"构建"(在开发期间)并在home.ctp每次编辑index.html时手动放置index.html文件.
这就是为什么我的头脑首先去了.htaccess.虽然,我明白这个想法有其自身的局限性,如果我想直接从CakePHP提供一个页面而不是将AngularJS带入图片中.
也许我可以配置构建系统将index.html放在CakePHP的home.ctp视图中.有关此解决方案的任何想法
Cake的主要原则之一是KISS("保持简单(愚蠢)").
如果url的响应/是index.html文件的响应,则不需要更改任何重写规则
即做相当于这个:
cd app
mv webroot/index.html View/Pages/home.ctp
<edit View/Pages/home.ctp>
Run Code Online (Sandbox Code Playgroud)
如果您将以下内容放在视图文件的顶部:
<?php $this->layout = false; ?>
Run Code Online (Sandbox Code Playgroud)
您也可以将内容保留为完整的原始html文件.
这样做可以消除任何.htaccess修改的需要.
关于其中一个要点的具体说明:
如果用户访问domain.com/#/home,请显示index.html并让Angular处理哈希路由
没有什么需要这样做,因为浏览器不会发送带有请求的url片段 - 服务器上收到的url是domain.com/.
然后,所需要的只是为url添加规则/- 这是唯一的例外:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^$ /index.html [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
Run Code Online (Sandbox Code Playgroud)
请务必使用.htaccess多年来更改的蛋糕确切版本的规则,并使用较新版本的Cake使用旧版本的重写规则导致奇怪的行为.
请注意,目录排除条件不是必需的,可能不需要(它允许使用例如目录列表/css).