未登录游客在触屏版情况下跳转指定页面
PC上面修改根目录index.php成功,但是手机版不管用,请问怎么设置?针对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]