Fork me on GitHub

vanilla 2.1版安装后样式丢失的原因

edited 2013年03月30日 经验心得

最近很多朋友反映vanilla 2.1版(或vanilla4china)安装后没有样式,css都是404 not found

http://vanillaforums.cn/discussion/500/安装中文版出现
http://vanillaforums.cn/discussion/496/我直接fork了项目然后部署了一下css什么的都找不多呀
http://vanillaforums.cn/discussion/392/安装后前台后台都能进-就是没有css样式很纠结

我测试后发现的确如此,检查后发现是vanilla 2.1版新加入的asset系统与nginx 静态文件配置的冲突造成的。

vanilla2.1版在DebugAssets关闭的情况下,会把页面所需的所有css文件压缩成一个文件,并由 /utility/css/style/style-233c5b07.css 这样的路径引用
<link rel="stylesheet" type="text/css" href="/utility/css/style/style-233c5b07.css" media="all" />

/utility/css/style/style-233c5b07.css 这个路径形如静态文件,并不是在/utility/css/style/目录下,但是实际上是由 UtilityController的Css方法 渲染的,也就是说,它是由php来处理的。但是如果你的nginx配置里有

location ~ .*\.(js)?$ {
    expires      30d;
    access_log   off;
}

这样的配置,/utility/css/style/style-233c5b07.css 这样的请求就不会被php接到,而是当做真的静态文件处理,于是就无法找到了。

解决方案:(三种选择其一

  1. 在conf/config.php 中设置 $Configuration['DebugAssets'] = TRUE; 禁用掉vanilla的asset系统

  2. 在nginx配置中去掉 location ~ .*.(js)?$ { expires 30d; access_log off; } 这样的配置

  3. 求解】针对 /utility/css/*.css 这样的访问路径禁用静态文件缓存。 这应该是最好的方法,但是我nginx水平太菜,多次尝试未果,请高手指导

此话题使用的标签:

回复

登录注册 才能回复。