商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > 怎样在ThinkPHP中实现前后端路由域名隔离【路由】

怎样在ThinkPHP中实现前后端路由域名隔离【路由】

  发布于2026-07-05 阅读(0)

扫一扫,手机访问

在ThinkPHP中实现前后端路由的域名隔离,说白了就是让前端访问(比如 www.example.com)和后端管理访问(比如 admin.example.com)走完全不同的路由逻辑,彼此不干扰。实现方式主要有两种:一种是相对轻量的“路由分组 + 域名绑定”,另一种是适合复杂项目的“多应用模式”。

怎样在ThinkPHP中实现前后端路由域名隔离【路由】

先说说最常用、也最省事的方案——域名绑定路由分组。这种方式不需要把项目拆成多个应用,特别适合中小型项目。具体操作是在 route/route.php 里,按域名分别定义路由分组:

  • 前端域名(比如 www.example.com)只加载前台路由,控制器放在 app/index/controller 目录下。
  • 后台域名(比如 admin.example.com)绑定独立分组,控制器建议放在 app/admin/controller 目录下。
  • 每个分组内可以设置统一的路由前缀(比如 /api/manage),当然也可以直接响应根路径。

来看一段示例代码:

use thinkfacadeRoute;

// 前台域名
Route::domain('www.example.com', function () {
    Route::get('/', 'index/index');
    Route::get('article/:id', 'index/article');
});

// 后台域名
Route::domain('admin.example.com', function () {
    Route::get('/', 'admin/index');
    Route::get('user/list', 'admin/user/list');
    Route::post('user/add', 'admin/user/add');
});

如果前后端逻辑差异比较大,比如权限体系、业务逻辑完全分离,那么多应用模式(ThinkPHP 6+ 原生支持)是更好的选择。具体来说:

  • 创建两个应用:app/index(前台)和 app/admin(后台)。
  • 每个应用拥有独立的 route.php、中间件和配置文件。
  • 通过域名自动切换应用入口:在 public/index.php 中根据 $_SERVER['HTTP_HOST'] 设置默认应用名。

入口文件里的判断逻辑大致是这样的:

$host = $_SERVER['HTTP_HOST'];
if (str_starts_with($host, 'admin.')) {
    define('APP_NAME', 'admin');
} else {
    define('APP_NAME', 'index');
}

域名隔离之后,一个绕不开的问题是跨域和 Cookie 的适配。前端页面在 www.example.com 上,调用 admin.example.com/api 接口时,跨域问题必须处理。简单的做法是在中间件中统一设置 Access-Control-Allow-Origin。至于登录态共享,需要统一 Cookie 的 domain,比如设为 .example.com,否则 wwwadmin 无法共用 session。一个更现代的建议是:后台 API 统一返回 JSON,并启用 Token 鉴权,这样可以大大减少对 Cookie 的依赖。

最后,Web 服务器这边的配置也不能忽视。确保所有子域名都指向同一个 public/ 目录,Web 服务器不需要做特殊转发。静态资源(CSS、JS、图片)可以统一放在 public/static/ 下,或者走 CDN 分发。至于强制 HTTPS 或域名跳转,这些应该在 Web 服务器层配置,而不是在 PHP 路由中硬编码。

本文转载于:https://www.php.cn/faq/2737066.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注