You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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-------------------------------&gt;

3. 开启SMF外部跳转权限(跨域名场景必做)

如果自定义页面和SMF论坛不在同一域名下,需在SMF后台开启外部跳转允许:

  1. 进入论坛后台 → 配置 → 服务器设置 → 安全和性能
  2. 勾选「允许重定向到外部URL」并保存设置

内容的提问来源于stack exchange,提问作者Pyli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 14:35:39