cmf后台获取服务器文件,thinkcmf高级应用,如何自定义模板位置?
本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规。大家都是程序员,不要闹得不开心。
thinkcmf默认情况下,自带了两个模板,一个是用于前台的模板simpleboot3,另外一个是用于后台的模板admin_simpleboot3。在最开始的文章中,苏南大叔表述了:如果服务器设置不当的话,会存在导致页面逻辑丢失的隐患。而且这些不可被用户访问的模板页面,却混杂着必须能够被用户访问的静态资源文件(js/css/img),所以,苏南大叔觉得这些模板文件的位置不是很合适。
thinkcmf高级应用,如何自定义模板位置?(图8-1)
官方解决方案
官方的解决方案也是蛮简单的,官方在themes文件夹下面增加了个.htacess文件,用于防止非法访问模板文件。但是这个设置能够ok的前提是使用apache服务器。
thinkcmf高级应用,如何自定义模板位置?(图8-2)
but,大多数人使用的是nginx服务器,官方给出的nginx的配置范例中,却没有解决这个问题。也就是说,如果您使用的是官方推荐的nginx配置的话,很有可能存在着,模板文件被非法访问的问题哦。
thinkcmf高级应用,如何自定义模板位置?(图8-3)
当然,苏南大叔也给出了个治标不治本的nginx方案。server {
## 这里请替换为原来的配置
location ~* ^\/upload\/.+\.(html|php|json)$ {
return 404;
}
location ~* ^\/plugins\/.+\.(html|php|json)$ {
return 404;
}
location ~* ^\/themes\/.+\.(html|php|json)$ {
return 404;
}
}
当然,如果把这些html文件的后缀都改成php。也许是个解决方案。不过,苏南大叔不喜欢这个方案,所以没有实验。thinkphp官方推荐的后缀是tpl。额,苏南大叔觉得tpl后缀也不是很好,毕竟不是标准可识别的文件,不确定性较多。您说对不对?
把themes目录移出可访问范围
大家都知道thinkcmf的可访问范围是/public/文件夹,理论上来说,这里只有一个入口文件是php。其它的所有的类库都是逃离这个/public/目录的。也就是说,正常情况下来说,要通过地址栏访问到类库中的php文件,是不可能存在的事情。
顺着这个思路来说,苏南大叔把/public/themes/目录移出/public/目录即可,至于/public/themes/下面的必须能够被访问的静态资源文件,苏南大叔给移动到了/public/static/目录下。这样的话,thinkcmf官方的皮肤组合,被苏南大叔一分为二,划分的标准就是可访问性。
当然,关于这些不可被用户直接访问的文件,苏南大叔认为:从运维角度上来说,还是有必要再次划分的,关于这些themes文件里面的json文件,存在这变数。在thinkcmf的系统原理里面,这些json文件是会读到数据库里面的,并且相应改动也产生在数据库里面。所以,这些json仅仅是个描述文件,并非最终的数据储存地,最终数据还是储存在数据库里面的。
最终,苏南大叔把/themes/文件夹放在和/public/文件夹同级的位置。同时,模仿thinkcmf的官方模板,新建了一套新的前台模板td,一套新的后台模板admin。
thinkcmf高级应用,如何自定义模板位置?(图8-4)
配置config.php
在thinkcmf的config配置中,要注意如下几个设置。这几个设置,见名思义即可,非常简单。'cmf_theme_path' => '../themes/',
'cmf_default_theme' => 'td',
'cmf_admin_theme_path' => '../themes/',
'cmf_admin_default_theme' => 'admin',
thinkcmf高级应用,如何自定义模板位置?(图8-5)
在修改这几个设置的时候,一定要注意一点,那就是config配置的相互覆盖关系。比如/data/conf/config.php就能覆盖/app/cofig.php中的设置。所以,这几个参数的设置位置,需要想好之后,再改写哦。
修复后台模板识别功能
移动模板位置后,后台的模板识别功能,就挂了。完全不能识别新的模板,更不能识别已知模板下面的json配置文件了。相关的后台操作经验教程,可以参考文末的相关链接部分。
这里,苏南大叔需要修复这个文件:/app/admin/model/ThemeModel.php。主要是这个文件里面的themes/字样,这个都要替换成变量。下图中是个范例。相关的代码都替换后,还需要修复一个函数updateThemeFiles()。
新增了一个方法getBaseFolder(),代码如下:public function getBaseFolder(){
return config("cmf_theme_path");
}
然后把这个文件中的themes/字样(有很多处哦,注意查找所有的地方哦),都换成这个方法的调用$this->getBaseFolder()。
thinkcmf高级应用,如何自定义模板位置?(图8-6)
在方法updateThemeFiles()中,原版的语句是这样的:$file = preg_replace('/^themes\/' . $theme . '\//', '', $tplFile);
苏南大叔修改版是这样的:$file = str_replace($this->getBaseFolder().'/' . $theme . '/', '', $tplFile);
thinkcmf高级应用,如何自定义模板位置?(图8-7)
修复皮肤模板中的静态资源访问地址
苏南大叔移动了模板位置后,原版的静态资源的描述常量__TMPL__已经不能满足要求了,所以,苏南大叔改用__STATIC__描述这些静态资源文件的位置。
thinkcmf高级应用,如何自定义模板位置?(图8-8)
相关链接
结论
上述这几步设置之后,就可以完全不必担心,模板的php逻辑会暴露在互联网上了。好开心不是?也不必担心:运维人员会因为不懂代码结构,而设置nginx配置错误而导致遗留漏洞。
更多由苏南大叔带来的thinkcmf的经验文章,请点击这里查看。https://newsn.net/tag/thinkcmf/ 。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
cmf后台获取服务器文件,thinkcmf高级应用,如何自定义模板位置?相关推荐
- 服务器锁定文件,BEA-141297 - 无法获取服务器文件锁定(BEA-141297 - Could not get the server file lock)...
BEA-141297 - 无法获取服务器文件锁定(BEA-141297 - Could not get the server file lock) 尝试启动Oracle Weblogic Server ...
- php获取服务器文件路径,php获取服务器路径
php获取服务器路径 内容精选 换一换 为加强对系统数据的容灾管理,云堡垒机支持配置日志备份,提高审计数据安全性和系统可扩展性.本小节主要介绍如何在系统配置FTP/SFTP服务器参数,将日志远程备份至 ...
- 使用nc获取服务器文件
一.实现: 1.安装nc 1) Linux系统,Centos为yum install nc 2)windows系统,下载nc.exe,将nc.exe放到C:\Windows\System32目录下 ( ...
- vb获取服务器文件路径,vb打开ftp服务器文件路径
vb打开ftp服务器文件路径 内容精选 换一换 该任务指导用户使用Loader将数据从HDFS/OBS导出到SFTP服务器.创建或获取该任务中创建Loader作业的业务用户和密码.确保用户已授权访问作 ...
- java怎么获取服务器文件夹,java获取远程服务器的文件夹
java获取远程服务器的文件夹 内容精选 换一换 工具中所有涉及上传文件功能的,如果需要上传的文件大于1GB或者解压后超过剩余磁盘空间的一半,则需要释放磁盘空间或手动将文件上传至服务器,其他情况可通过 ...
- ssh 获取服务器文件命令,ssh读取服务器文件内容
@Override @Transactional public void analysisIPSLog() { SimpleDateFormat sdf = new SimpleDateFormat( ...
- .NET HttpGet 获取服务器文件下的图片信息 同步和异步方式处理
/// <summary>/// 项目文件夹下路径 返回流类型数据,如:图片类型/// </summary>/// <returns></returns> ...
- python获取服务器文件svn版本信息_如何编程获取SVN版本号?
您可以在命令行上使用"svn info"获取签出的当前修订号. 例如:$ svn info Chemin : . URL : http://.../trunk Racine du ...
- c 怎么获取服务器文件是否存在,powershell - 需要找出服务器上是否存在特定的文件夹。如果是,那么哪个驱动器是C:或D - 堆栈内存溢出...
我需要找出服务器上Backupeventlog存在名为Backupeventlog文件夹. 如果是,那么哪个驱动器为C:或D:驱动器. 此文件夹也为空,如果不为空,则此文件夹下创建的最新文件的日期是什 ...
最新文章
- python urllib2 开启调试
- faster rcnn学习之rpn、fast rcnn数据准备说明
- Java从入门到精通——数据库篇Mongo DB GridFS文件系统
- 卧槽,又来一个Windows神器!!!
- steam服务器102修复,分享steam错误代码102的解决方法
- 通过LeecodeAnimation学习数据结构与算法(0)上
- 深度学习:GAN 对抗网络原理详细解析(零基础必看)
- html添加视频背景
- python微信朋友圈刷图_用python中的itchat可视化微信朋友圈
- python:talib 计算 KDJ 用 pro_api
- python余弦相似度_推荐系统01--余弦相似度
- 2-10偶数乘2奇数乘3
- python中如何解决类互相调用问题_python中同一个类,带参的方法直接如何相互调用...
- 微信小程序个人订单,微信头像用户名信息获取页面
- 坚持到底—兄弟连IT教育
- java计算机毕业设计共享汽车管理系统源码+mysql数据库+系统+lw文档+部署
- 教育源代码,培训教育源码,万岳教育直播平台源码校园版
- 2020美容师(初级)考试及美容师(初级)证考试
- python自动批量下载_Python批量下载鼠标样式,自动化一条龙处理详解
- php 文字水印去除毛边_【PHP的图像处理】文字水印、图片水印、压缩图像等实例...
热门文章
- 腐烂国度2巨霸版计算机学知识,腐烂国度2巨霸版新手游戏技巧汇总
- c语言oj题1923偶数之和,问题 1923: [蓝桥杯][算法提高VIP]学霸的迷宫 (BFS)
- 集齐百度、腾讯、商汤的几位大佬!我的BAT朋友们
- 三星高分辨率显示器S65UA,您的居家办公“好助手”
- iOS CPU占有率达到了100%甚至更多,然后导致App闪退
- python 来源软件应急处理_Mac遇到挖矿程序的应急方法
- Sentry 简单介绍
- 苹果x屏幕出现一条绿线_部分用户反映苹果 iPhone 12 屏幕出现划痕 抗划痕能力到底如何? - 手机 - IT商业网...
- 长江大学计算机科学学院在哪个校区,华北科技学院有几个校区及校区地址
- 服务器内存不足上传文件解决办法,电脑内存不足的解决方法