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

通过路由或用户触发实现Web App公开发布的最优方案

最优实现方案

核心思路是用临时文件标识作为上线开关,不需要修改配置、不需要接入数据库,触发后实时生效,后续清理成本极低,完全匹配你的需求。

实现步骤

1. 修改现有domain_block中间件逻辑

调整判断规则,新增上线标识文件存在性校验:

public function handle(Request $request, Closure $next)
{ 
    // 本地环境直接放行
    if(App::environment('local')) {
        return $next($request);
    }
    // 检测上线标识文件是否存在
    if (file_exists(storage_path('app/site_launched.lock'))) {
        return $next($request);
    }
    // 未触发上线时返回待发布页面
    return new Response(view('layouts.coming-soon'));
}

2. 新增临时上线触发接口

单独加一条不需要走domain_block中间件的路由,做简单的权限校验后生成标识文件:

// 临时上线触发路由,发布会结束后可直接删除
Route::get('/admin/trigger-launch', function () {
    // 提前预设一个只有负责人知道的秘钥,防止误触发
    if (request()->input('secret') !== '你自定义的高复杂度随机秘钥') {
        abort(403);
    }
    // 生成上线标识文件
    file_put_contents(storage_path('app/site_launched.lock'), 'launched at '.date('Y-m-d H:i:s'));
    return '站点已成功开放访问';
});

操作流程

  1. 发布会前提前把上述代码改动部署到生产环境,此时没有标识文件,用户访问仍然显示coming soon页面,不影响正常预热
  2. 发布会到上线环节时,将拼接好秘钥的触发链接发给机构负责人,负责人点击链接即可完成上线,所有用户刷新页面就能正常访问站点,全程不需要等待构建部署,秒级生效
  3. 发布会结束后,你可以直接删除domain_block中间件、临时触发路由,以及storage/app下的site_launched.lock文件即可,没有任何遗留代码负担

方案优势

  • 完全规避配置缓存问题:文件存在性判断是实时IO读取,不需要清缓存、不需要重新构建
  • 无额外依赖:不需要修改数据库、不需要接入第三方服务,仅用Laravel原生能力即可实现
  • 操作成本极低:负责人仅需点击一次链接即可完成操作,适合发布会场景
  • 后续清理简单:临时代码和标识文件均可直接删除,不会对后续业务产生影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 05:57:01