vanilla 2.1版安装后样式丢失的原因
最近很多朋友反映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接到,而是当做真的静态文件处理,于是就无法找到了。
解决方案:(三种选择其一)
在conf/config.php 中设置 $Configuration['DebugAssets'] = TRUE; 禁用掉vanilla的asset系统
在nginx配置中去掉 location ~ .*.(js)?$ { expires 30d; access_log off; } 这样的配置
【求解】针对 /utility/css/*.css 这样的访问路径禁用静态文件缓存。 这应该是最好的方法,但是我nginx水平太菜,多次尝试未果,请高手指导
回复
发现php版本不是5.3的都会没有样式
我是5.33也没有样式
2.2最新版本,解决这个问题了吗?
@itopidea 其实不是代码的问题,是部署环境的问题,上文已经分析了