针对Discuz触屏版未登录游客跳转问题,以下是具体解决方案:
1. 独立入口文件修改方案
找到触屏版入口文件`mobile/index.php`,在首行插入以下代码:
- <?php
- define('CURSCRIPT', 'mobile');
- require_once './source/class/class_core.php';
- $discuz = C::app();
- $discuz->init();
- //新增跳转代码开始
- if(empty($_G['uid'])){
- dheader('Location: http://您的指定页面地址');
- exit();
- }
- //新增跳转代码结束
- $ctlObj = new mobile_controller();
- $ctlObj->index_action();
复制代码
2. 推荐使用全局插件方案(推荐)
创建`source/plugin/redirect_guest`目录,新建`redirect_guest.class.php`:
- <?php
- if(!defined('IN_DISCUZ')) exit;
- class plugin_redirect_guest {
- public function global_header(){
- global $_G;
- // 设备类型检测(同时兼容新旧版Discuz)
- $isMobile = $_G['mobile'] || strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false;
-
- // 排除AJAX请求和API接口
- if( !$_G['uid']
- && $isMobile
- && !defined('IN_API')
- && !defined('IN_AJAX')
- && CURSCRIPT !== 'member'){
- dheader('Location: http://您的指定页面地址');
- exit();
- }
- }
- }
复制代码
3. 安装步骤:
- 将插件文件夹上传至`source/plugin/`目录
- 后台→应用→插件→找到"游客跳转"插件→启用
4. 高级适配方案(处理特殊页面)
在插件代码中增加白名单检测:
- // 允许访问的控制器列表
- $allowControllers = array('login','register','api');
- if( !in_array(CURSCRIPT, $allowControllers)
- && !$_G['uid']
- && $isMobile ){
- // 执行跳转
- }
复制代码
注意事项:
1. 替换代码中的跳转地址为实际URL
2. 修改后需到后台更新缓存(工具→更新缓存)
3. 如果使用CDN,需同步刷新CDN缓存
4. 对搜索引擎蜘蛛做例外处理(可选):
- // 在跳转判断前添加
- if(preg_match('/bot|spider|slurp/i', $_SERVER['HTTP_USER_AGENT'])) {
- return;
- }
复制代码
此方案优势:
- 完美兼容PC/手机双版本
- 不破坏系统核心文件
- 支持Discuz全版本(X3.2-X3.5)
- 智能排除AJAX请求和特殊页面
- 对SEO友好
如遇特殊情况需要深度定制,建议到DZ插件网技术社区(www.dz-x.net)提交详细运行环境信息获取针对性解决方案。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |