SMF 2.1.4登录跳转异常:登录后无法返回原页面,默认跳至论坛首页
解决SMF 2.1.4 SSI登录后无法返回原页面的问题
问题根源
$_SERVER['HTTP_REFERER'] 依赖浏览器传递,可能因隐私设置禁用、跳转场景丢失等原因失效,且SMF默认可能限制外部域名跳转,导致登录后只能返回论坛首页。
修复步骤
1. 修改受限页面:传递原页面URL作为GET参数
不要依赖HTTP_REFERER,直接在跳转登录页时把当前页面URL编码后通过GET参数传递:
<?php require("/var/www/html/community/SSI.php"); ?> <?php if ($context['user']['is_logged']) { echo' <div> <!--------------------------HTML--------------------------> </div>'; } else { // 动态生成当前页面完整URL $currentUrl = 'https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // 编码后传递给登录页 redirectexit('https://mywebsite.com/event/login.php?redirect_to=' . urlencode($currentUrl)); } ?> </body> </html>
2. 修改登录页:接收并传递跳转URL给SSI登录函数
在自定义login.php中直接读取GET参数,替代HTTP_REFERER:
<?php include '/var/www/html/community/SSI.php'; ?> <!------------------HTML----------------------------> <p class="title"> <?php ssi_welcome(); ?> </p> <!-------------------HTML----------------------------> <?php if ($context['user']['is_guest']) { // 获取跳转目标,默认跳网站首页 $redirectTo = isset($_GET['redirect_to']) ? urldecode($_GET['redirect_to']) : 'https://mywebsite.com'; // 可选:验证域名,防止恶意跳转 $allowedDomains = ['mywebsite.com']; $parsedUrl = parse_url($redirectTo); if (!in_array($parsedUrl['host'], $allowedDomains)) { $redirectTo = 'https://mywebsite.com'; } // 传递给ssi_login ssi_login($redirectTo); } else { $_SESSION['logout_url'] = 'https://mywebsite.com'; ssi_logout(); } ?> <!-------------------------HTML------------------------------->
3. 开启SMF外部跳转权限(跨域名场景必做)
如果自定义页面和SMF论坛不在同一域名下,需在SMF后台开启外部跳转允许:
- 进入论坛后台 → 配置 → 服务器设置 → 安全和性能
- 勾选「允许重定向到外部URL」并保存设置
内容的提问来源于stack exchange,提问作者Pyli
相关产品推荐
相关产品推荐

