Cakephp 资产未从 webroot 文件夹中获取.. 缺少 js 和 css,
Posted
技术标签:
【中文标题】Cakephp 资产未从 webroot 文件夹中获取.. 缺少 js 和 css,【英文标题】:Cakephp assets not fetching from webroot folder.. missing js & css, 【发布时间】:2013-07-24 21:23:39 【问题描述】:我一直在 localhost 上进行构建,所有这些东西都运行良好。现在尝试将站点加载到共享主机上。我已经解决了大部分问题,实际上有一个工作站点,但没有任何 css。
布局: 我的应用位于:/home/cake/app
public_html 位于:/home/public_html
在 public_html/index.php 中,我能够摆脱丢失文件错误的唯一方法就是这样做......
require '../cake/app/webroot' . DIRECTORY_SEPARATOR . 'index.php';
public_html中的.htaccess:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %REQUEST_FILENAME !-d
RewriteCond %REQUEST_FILENAME !-f
RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>
我的应用是从命令行烘焙的。 链上的所有 index.php 和 .htaccess 文件都保持不变。
/cake
/cake/webroot
/cake/app
/cake/app/webroot
它只是找不到所有 css 和 js 文件的路径。 在我的 default.ctp 中,我使用了标准的 html 帮助程序链接。
echo $this->Html->css('default');
众所周知,我已经走到了尽头。任何帮助表示赞赏。 在 localhost 上,我将 apache 目录指向 /cake/app,但我很确定我无法访问共享主机上的 apache 配置文件,因此我将 public_html index.php 指向 /cake/app .可能不对,但感觉自从网站开始工作以来我就朝着正确的方向前进。
【问题讨论】:
查看如何更改您的webroot
文件夹(在本例中为public_html
):***.com/questions/9485994/…
【参考方案1】:
您所有的 CSS 和 JS 都应该在 app/webroot
目录中。
听起来您的虚拟主机设置不正确。 (这就是为什么 CSS 可以在 public_html
而不是 webroot
目录中工作的原因。
基本上,我们只允许通过app/webroot/
访问我们的应用程序。这将在webroot
中加载index.php
,这是由cakePHP
提供的,以便为每个请求加载controllers
。
您的虚拟主机文件应如下所示:
<VirtualHost *:80>
# Correct: Notice the "/app/webroot/"
DocumentRoot "/path/to/app/public_html/app/webroot/"
# Below is INCORRECT
# Incorrect: DocumentRoot "/path/to/app/public_html/app/"
ServerName yourdomain.com
</VirtualHost>
现在.. 可以从外部世界访问的唯一目录是 webroot
中的所有内容,可以是 JS
、CSS
、Images
、Files
或您需要的任何其他资产。
这是应该如何设置的,你不希望人们能够访问你的webroot
之外的文件(即所有其他 CakePHP 文件)。
在共享主机提供商上,您需要稍微不同的设置(您将无法访问共享服务器的虚拟主机)。这解释了 OP 所说的目录结构略有不同。阅读此处了解有关在共享主机上部署 cakephp 的更多信息。
http://bakery.cakephp.org/articles/gedm/2009/08/29/installing-cakephp-on-shared-hosting
不要将来自 webroot 的 index.php
包含在另一个 index.php 中(在您的 public_html
中),而是考虑将 webroot 文件夹 entirley 更改为您的 public_html
。
View here for more info on change cakephp webroot folder:CAKEPHP - Change default path to webroot
【讨论】:
hmm,这个结构有点奇怪,我使用的是全新 CakePHP 安装的实际结构,你可以在 cakephp.org 上查看(点击下载)。 我知道我们只想通过 /app/webroot 访问。在我的本地机器上,我就是这样做的。但是,在此共享主机(客户端站点)上,我无权访问 vhosts 文件。 (我正在检查他们是否可以为我编辑该文件。)在 public_html 中,我有一个 index.php 文件,它需要 ../cake/app/webroot/index.php。前面提到的.htaccess。现在我只有包含 css 和 js 文件的 /app/webroot 文件夹的副本。因此,从安全角度来看,这在功能上应该大致相同。是的,css/js/img 文件在 public_html 中,但没有其他的。 我会消化那篇文章,也许会尝试他的建议。不过好像更难。我只是将整个开箱即用的蛋糕应用程序复制到根目录中,而无需编辑任何其他文件或路径语句。不过,感谢您的洞察力。我很感激。 我本来打算建议这样做,但不确定 cakephp 是否会在不修改任何文件的情况下接受它,感谢您告诉我们!..【参考方案2】:将/etc/apache2/sites-available/default
中的AllowOverride none
更改为AllowOverride FileInfo
。
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /home/user/app/
<Directory />
Options FollowSymLinks
AllowOverride FileInfo
</Directory>
<Directory /home/user/app/>
Options Indexes FollowSymLinks MultiViews
AllowOverride FileInfo
Order allow,deny
allow from all
</Directory>
它对我有用。
【讨论】:
【参考方案3】:最后,这是我启用 mod_rewrite 的命令:
$ a2enmod 重写
【讨论】:
【参考方案4】:好吧,不确定这是否“正确”,但我将所有包含 css 和 js 文件的文件夹复制到 public_html 中,这是有道理的。所有这些资产都需要公开访问。网站现在工作。
【讨论】:
这不是 cakephp 标准。以上是关于Cakephp 资产未从 webroot 文件夹中获取.. 缺少 js 和 css,的主要内容,如果未能解决你的问题,请参考以下文章