无法加载css文件

时间:2016-12-11 07:59:30

标签: cakephp

设置CakePHP项目的新副本后,代码中的css引用为:

/my_app_name/css/cake.css

虽然我的css文件的真实位置是:

/my_app_name/webroot/css/cake.css

为什么?

2 个答案:

答案 0 :(得分:1)

如果您的CSS文件位于/app/webroot/css/(默认位置),您不必知道任何其他内容,请将它们包含在您的模板绝对网页中:

<link href="/css/cake.css" rel="stylesheet" type="text/css">

答案 1 :(得分:1)

  

为什么?

与大多数框架一样,CakePHP默认使用url rewriting(不是要求,也可以是turned off)。对于apache用户,这是通过.htaccess文件实现的,this one in the root of your application

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule    ^$    webroot/    [L]
    RewriteRule    (.*) webroot/$1    [L]
</IfModule>

而且another in the webroot - 这些文件的存在意味着网址重写只适用于大多数用户。

应用程序根文件夹中的规则会重写对webroot文件夹的所有请求,因此这些URL实际上是等效的:

http://localhost/my_app_name/some/file.css
http://localhost/my_app_name/webroot/some/file.css

这些重写规则的主要目的是安全性 - 它阻止了访问webroot文件夹之外的应用程序文件的可能性 - 如果使用a production install则不需要这样做。这样做的副作用是,无论是开发风格还是生产风格的安装,网址都保持不变。

使用帮助程序类

the html helper等类会负责了解文件的位置并正确链接到这些文件,不要试图在模板文件中硬编码资源的路径,也就是说不要这样做:

<html>
    <link rel="stylesheet" href="/my_app_name/css/cake.css" />

而是这样做:

<html>
    <?= $this->Html->css('forms'); ?>

否则,您会发现即使是重命名应用程序这样简单的事情也意味着链接/资产会中断。