avatar

mdo

Hello

  • 首页
  • 知识库
  • 归档
  • 标签
  • 关于
主页 thinkphp6 如何绑定域名到应用
文章

thinkphp6 如何绑定域名到应用

发表于 2026-03-30 更新于 2026-03- 30
作者 mdo
7~10 分钟 阅读

在ThinkPHP6中绑定域名到应用,可以通过配置文件或路由设置来实现。以下是几种常见的方法:

方法一:通过配置文件绑定

app.php

<?php
// +----------------------------------------------------------------------
// | 应用设置
// +----------------------------------------------------------------------
return [
    // 应用域名绑定(自动多应用模式有效)
    'domain_bind' => [
        'admin.example.com' => 'admin',  // 绑定admin应用
        'api.example.com'   => 'api',    // 绑定api应用
        'www.example.com'   => 'index',  // 绑定index应用
    ],
];

方法二:通过路由配置绑定

在route/app.php文件中添加域名绑定规则:

app.php

<?php
use think\facade\Route;

// 绑定admin应用到admin.example.com
Route::domain('admin.example.com', function () {
    // 默认的路由规则定义
    Route::get('/', 'index/index');
});

// 绑定api应用到api.example.com
Route::domain('api.example.com', function () {
    // API路由规则
    Route::get('user/:id', 'user/read');
});

方法三:在入口文件中绑定

在public/index.php中直接绑定域名到应用:

index.php

<?php
// 定义应用目录
define('APP_PATH', __DIR__ . '/../app/');

// 绑定域名
$http = (new \think\App())->http;

// 绑定admin域名到admin应用
if ($_SERVER['HTTP_HOST'] == 'admin.example.com') {
    $response = $http->name('admin')->run();
}
// 绑定api域名到api应用
elseif ($_SERVER['HTTP_HOST'] == 'api.example.com') {
    $response = $http->name('api')->run();
}
// 默认绑定到index应用
else {
    $response = $http->name('index')->run();
}

$response->send();
$http->end($response);

方法四:使用中间件处理域名绑定

创建一个域名绑定中间件:

DomainBind.php

<?php
namespace app\middleware;

class DomainBind
{
    public function handle($request, \Closure $next)
    {
        $host = $request->host();
        
        // 根据域名绑定到不同的应用
        switch ($host) {
            case 'admin.example.com':
                $request->app = 'admin';
                break;
            case 'api.example.com':
                $request->app = 'api';
                break;
            default:
                $request->app = 'index';
        }
        
        return $next($request);
    }
}

然后在全局中间件配置中注册:

middleware.php

<?php
// 全局中间件定义文件
return [
    \app\middleware\DomainBind::class,
];

注意事项

  1. 确保在DNS服务器中已将域名正确解析到服务器IP

  2. 在Web服务器(如Nginx/Apache)中配置虚拟主机

  3. 如果使用多应用模式,确保目录结构正确

  4. 测试时可以使用本地hosts文件模拟域名解析

推荐方案

对于生产环境,推荐使用方法一(配置文件绑定)或方法二(路由配置绑定),因为这两种方式:

  • 配置集中,易于维护

  • 性能较好

  • 支持动态路由

  • 可以利用ThinkPHP的路由特性

对于开发环境或特殊需求,可以使用方法三或方法四。

选择哪种方法取决于你的具体需求和项目架构。如果只是简单的域名绑定,方法一最简单直接;如果需要更灵活的路由控制,方法二更为合适。

技术
ThinkPHP6
许可协议:  CC BY 4.0
分享

相关文章

10月 2, 2026

iOS 侧载(Sideloading)工具

AltStore 和 Sideloadly 都是目前最流行的 iOS 侧载(Sideloading)工具。 简单来说,它们的作用就是让你绕过苹果的官方 App Store,直接把第三方的 IPA 安装包(也就是 iOS 的应用安装文件)安装到你的 iPhone 或 iPad 上。 通过这两个工具,你

9月 28, 2026

注册 Chat Participant

将当前服务接入 VS Code 的 AI 聊天窗口是完全可行的。VS Code 在近期的版本中正式推出了 Chat Extensions API(github.copilot.chat),允许第三方扩展将自定义的 LLM 服务或工具注册到 Copilot Chat 面板中。 结合当前 code_ge

9月 23, 2026

php intelephense 设置 if 空格

在 VS Code 中,如果你使用的是 PHP Intelephense 插件,控制 if 关键字后面是否加空格的设置是由其内置的格式化引擎(基于 PSR-12 标准)决定的。 你可以通过修改 VS Code 的 settings.json 来配置这个行为: 1. 开启 if 后面的空格(默认/推荐

下一篇

Gitkraken 最新版v9、v10破解教程

上一篇

运维脚本

最近更新

  • 比尔盖茨的智慧:想多赚钱,就每天循环做这3件事
  • iOS 侧载(Sideloading)工具
  • 程序员越想创业,越不要急着动手
  • 注册 Chat Participant
  • 中秋给在外游子的一封信

热门标签

API CodeGeex Coding Cursor DeepSeek Docker Gitkraken Harness Laravel Management

目录

©2026 mdo. 保留部分权利。