当前位置:论坛首页 > Linux面板 > 求助

宝塔 API 启用 / 停用站点仅修改状态,未重写 Apache vhost 配...

发表在 Linux面板昨天 16:53 [复制链接] 0 32

宝塔版本:宝塔 Linux 面板(Apache 环境)
Web 服务:Apache
操作方式:通过宝塔 API 调用启用 / 停用站点

我在做一个通过宝塔 API 批量或者单个启用 / 停用站点的功能,遇到一个比较严重的问题:

通过 API 调用启用 / 停用站点后,只修改了数据库中的站点状态,但 Apache 的 vhost 配置文件并没有被真正重写,站点配置不会发生实际变化。


具体表现为:
  • API 返回成功
  • 面板中站点状态显示为「已启用 / 已停用」
  • 但 /www/server/panel/vhost/apache/*.conf 中:

    • DocumentRoot 仍然保持原状
    • 启用后不会从 /www/server/stop 恢复到真实站点目录
    • 停用后也不会稳定切换到 stop 目录

  • 即使 重启 Apache / 重新加载 Apache,站点访问行为依然没有变化


```

        // 启用/停用后,需要重写Apache配置文件并重载服务才能生效
        // 注意:SiteStart/SiteStop只是更新了数据库状态,需要重写配置文件才能真正生效
        // 根据宝塔工作原理,需要调用ReWeb接口重写配置并重载服务
        $reloadSuccess = false;

        // 使用站点名称调用ReWeb接口(这会重写配置并重载Apache)
        $rewebUrl = $bturl.'/site?action=ReWeb';
        $rewebData = $this->GetKeyData($keys);
        $rewebData['name' = $mainDomain; // 使用站点域名,而不是Web服务器名称
        $rewebResult = $this->HttpPostCookie($bturl, $rewebUrl, $rewebData);
        if($rewebResult !== false){
            $tmp = json_decode($rewebResult, true);
            if(is_array($tmp) && (!empty($tmp['status']) || isset($tmp['msg']))){
                $reloadSuccess = true;
            }
        }

        // 如果ReWeb接口失败,尝试直接重启Apache服务
        if(!$reloadSuccess){
            $apacheUrl = $bturl.'/system?action=RestartWeb';
            $apacheData = $this->GetKeyData($keys);
            $apacheData['name' = 'apache';
            $apacheResult = $this->HttpPostCookie($bturl, $apacheUrl, $apacheData);
            if($apacheResult !== false){
                $tmp = json_decode($apacheResult, true);
                if(is_array($tmp) && !empty($tmp['status'])){
                    $reloadSuccess = true;
                }
            }
        }

        if(!$reloadSuccess){
            $this->last_error['restart_warning' = '站点状态已更新,但配置重写/重载失败,可能需要手动重写配置并重启Apache';
        }



```
使用道具 举报 只看该作者 回复
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急运维服务

响应时间:3分钟

问题处理方式:宝塔专家1对1服务

工作时间:工作日:9:00 - 18:30

宝塔专业团队为您解决服务器疑难问题

点击联系技术分析

工作时间:09:00至18:30

快速回复 返回顶部 返回列表