2

我一直在 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');

我已经走到尽头了。任何帮助表示赞赏。在本地主机上,我将 apache 目录指向 /cake/app,但我很确定我无法访问共享主机上的 apache 配置文件,因此我将 public_html index.php 指向 /cake/app . 可能不对,但自从网站开始工作以来,我感觉我正朝着正确的方向前进。

4

4 回答 4

5

您所有的 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可以是JSCSS、或您需要的任何其他资产。ImagesFiles

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


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

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

index.php考虑将webrootpublic_html文件夹 entirley 更改为您的public_html.

在此处查看有关更改 cakephp webroot 文件夹的更多信息: CAKEPHP - 将默认路径更改为 webroot

于 2013-07-25T10:21:48.613 回答
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>

它对我有用。

于 2014-07-09T10:04:41.460 回答
2

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

$ a2enmod 重写

于 2014-12-25T22:57:14.427 回答
-1

好吧,不确定这是否“正确”,但我将所有包含 css 和 js 文件的文件夹复制到 public_html 中,这是有道理的。所有这些资产都需要公开访问。网站现在工作。

于 2013-07-25T06:58:07.520 回答