小樱 发表于 2020/2/20 05:01

discuz 模板中删除大图模式,未登录游客访问会被缓存

只看大图找不到关闭的地方,游客访问会被缓存,,然后二次访问都是大图模式,游客未登录点击帖子模式切换无效
找到 template/default/forum/viewthread_node.htm 文件

删除
<span class="pipe">|</span><a href="forum.php?mod=viewthread&tid=$_G&from=album">{lang view_bigpic}</a>

该方法仅是模板中删除,如果遇到搜索引擎之类的爬虫,还是会出现的,并不能完全修复这个bug,最根本的解决方法要用从PHP代码中删除关闭
看url参数是&page=1和&from=album的区别,就是让&from=album,访问&from=album也是显示为帖子模式
刚在网上搜索半天找不到任何方案,,本帖大概可能这是唯一一个关联的帖子?
php方面,,得有时间找找,反正我git提了,,等开源站的大佬修吧

或者换个思路,,使用url 302重写来解决?
例如:匹配
forum.php\?mod=viewthread&tid=(+)&from=album$
url 302重写跳转
forum.php\?mod=viewthread&tid=$1&page=1$
还能跳到伪静态页面
thread-$1-1-1.html$
测试:http://bbs.itzmx.com/forum.php?mod=viewthread&tid=94862&from=album
视乎也完美!
这样php就收不到&from=album请求了,自然也不会输出大图模式


一种绕过页面缓存的方法,让其在大图模式自由切换帖子模式
source/module/forum/forum_viewthread.php#L36
if($_G['setting']['cachethreadlife'] && $_G['forum']['threadcaches'] && !$_G['uid'] && $page == 1 && !$_G['forum']['special'] && empty($_GET['do']) && !defined('IN_ARCHIVER') && !defined('IN_MOBILE')) {
改为
if($_G['setting']['cachethreadlife'] && $_G['forum']['threadcaches'] && !$_G['uid'] && $page == 1 && !$_G['forum']['special'] && empty($_GET['do']) && empty($_GET['from']) && !defined('IN_ARCHIVER') && !defined('IN_MOBILE')) {


该问题已可以在官方git解决,关联:https://gitee.com/ComsenzDiscuz/DiscuzX/issues/I19VUP#note_2275998

不可名 发表于 2020/2/20 05:19

路过。标记
页: [1]
查看完整版本: discuz 模板中删除大图模式,未登录游客访问会被缓存