我一直在使用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 。可能不对,但感觉自从网站开始工作以来我正朝着正确的方向前进。
答案 0 :(得分:5)
所有CSS&amp; 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
或无论你需要什么其他资产。
这是应该如何设置的,你不希望人们能够访问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中,这种方式很有意义。所有这些资产都需要公开访问。网站现在有效。