我一直在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的原因。可能不正确,但是自该站点开始工作以来,感觉就像我朝着正确的方向前进。
最佳答案
您所有的CSS和JS应该都在app/webroot
目录中。
听起来您的虚拟主机设置不正确。 (这就是CSS在public_html
而不在webroot
目录中起作用的原因)。
基本上,我们只允许通过app/webroot/
访问我们的应用程序。这将在index.php
提供的webroot
中加载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文件夹entirley更改为
index.php
,而不是将webroot的public_html
包括在另一个index.php中(在public_html
内部)。View here for more info on change cakephp webroot folder: CAKEPHP - Change default path to webroot
关于php - Cakephp Assets 未从webroot文件夹中获取。缺少js和CSS,,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17850316/