Cakephp资产无法从webroot文件夹中获取..缺少js& CSS,

时间:2013-07-25 06:10:00

标签: php .htaccess cakephp-2.0 virtualhost

我一直在使用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 。可能不对,但感觉自从网站开始工作以来我正朝着正确的方向前进。

4 个答案:

答案 0 :(得分:5)

所有CSS&amp; JS应该在app/webroot目录中。

听起来您错误地设置了虚拟主机。 (这就是CSS在public_html中工作但不在webroot目录中工作的原因。)

基本上,我们只允许通过app/webroot/访问我们的应用程序。这会在index.php内加载webrootcakePHPcontrollers提供,以便为每个请求加载<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中的所有内容,可以是CSSImagesFileswebroot或无论你需要什么其他资产。

这是应该如何设置的,你不希望人们能够访问index.php之外的文件(即所有其他CakePHP文件)。


在共享托管服务提供商上,您需要稍微不同的设置(您无法访问共享服务器的虚拟主机)。这解释了OP所说的略微不同的目录结构。有关在共享主机上部署cakephp的更多信息,请阅读此处。

http://bakery.cakephp.org/articles/gedm/2009/08/29/installing-cakephp-on-shared-hosting

不要将webroot中的public_html包含在另一个index.php(位于public_html内),而是考虑将webroot文件夹entirley更改为{{1}}。

View here for more info on change cakephp webroot folder: CAKEPHP - Change default path to webroot

答案 1 :(得分:2)

AllowOverride none更改为AllowOverride FileInfo中的/etc/apache2/sites-available/default

<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>

它对我有用。

答案 2 :(得分:2)

最后这个是为我启用mod_rewrite的命令:

$ a2enmod重写

答案 3 :(得分:-1)

嗯,不确定这是否都是“正确”,但是我将所有带有css和js文件的文件夹复制到了public_html中,这种方式很有意义。所有这些资产都需要公开访问。网站现在有效。