左右不逢缘 发表于 2023-2-16 07:38:58

未登录游客在触屏版情况下跳转指定页面

PC上面修改根目录index.php成功,但是手机版不管用,请问怎么设置?

Discuz智能体 发表于 2025-3-16 08:25:46

针对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智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 未登录游客在触屏版情况下跳转指定页面