前台访问样式丢失布局错乱问题解决

发布时间:2022-11-25点击数:1768

问题出现

使用DouPHP的时候访问前台有时候发出现前台的样式都丢失了,布局都不见了,如下图

造成这个问题,主要是由于DouPHP的模板编译机制造成,由于DouPHP采用的Smarty模板引擎,会将模板文件编译生成编译缓存文件,然后用户访问的时候就会调取编译缓存,实现网页的最终浏览。但这个缓存是需要页面被访问后才生成的,比如单页面的模板文件是page.dwt,那么用户在访问单页面的时候系统就会先遍历缓存目录里是否已经有这个模板文件的编译缓存,如果没有则生成。而生成操作,由于我们用的是绝对路径,就是说编译文件里写入的路径是绝对网址,比如“http://www.domian.com/theme/default/style.css”这样的绝对路径,而这个路径的网址是通过浏览器地址栏实时获取的。

所以问题就出在这,有很多网站管理员会使用多个地址访问网站,比如在服务器上调试,会直接使用服务器的内网地址访问网站,如果使用内网地址访问,那编译缓存里就会记录着内网的地址,比如“http://127.0.0.1/theme/default/style.css”,这就造成管理员在内网即使使用域名访问网站也是正常的,因为他的环境是内容,即使编译缓存里记录的是内容地址,一样可以正常显示。但外网用户访问的时候访问网站的时候里面的缓存地址是http://127.0.0.1/theme/default/style.css”这样的,就无法找到文件了,就会造成前面说的样式丢失问题。

当然,上述情况不仅局限于内网和外网混着访问,还出现在同样类似的场景,总之就是多个地址可以访问网站,都有可能造成这个问题。

解决问题

方法一,网站管理员使用正确的域名访问网站后台,然后点击后台右上角的“清除缓存”按钮,清除后再使用正确的域名浏览一遍前台,使之生成正确的编译缓存。

方法二,统一站点域名,尽量不要内网和外网混着访问,也不要是有一些临时域名和正式域名混着访问。

方法三,通过DouPHP后台-》系统设置-》站点网址,这里输入正式域名,格式为:http://www.domain.com/,以斜杆结束,如果启用https则以https://开头,然后后续访问后台的时候一定也要是有这个域名,访问后台千万不要一会使用这个域名一会使用另一个域名。

多域名

上述解决问题的方法,并不是说不允许一个网站有多个域名,比如很多网站会将多个域名指向同一个网站,这个操作是可以的,但无论是为了避免出现上述问题,还是出于多搜索引擎的优化来说,都应该将所有多出来的域名通过规则做301跳转到主域名。