php怎样实现分站
实现PHP分站的方法
多域名绑定同一项目
通过配置服务器(如Apache或Nginx)将不同域名指向同一项目目录,在PHP中根据$_SERVER['HTTP_HOST']判断当前访问的域名,加载对应的配置和模板。
$currentDomain = $_SERVER['HTTP_HOST'];
switch($currentDomain) {
case 'site1.example.com':
$config = include 'config_site1.php';
break;
case 'site2.example.com':
$config = include 'config_site2.php';
break;
default:
$config = include 'config_default.php';
}
子目录方式
在项目根目录下为每个分站创建独立子目录,每个子目录包含独立的入口文件和配置。通过URL重写规则隐藏子目录路径。
project/
├── site1/
│ ├── index.php
│ └── config.php
├── site2/
│ ├── index.php
│ └── config.php
└── .htaccess
.htaccess示例:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^site1\.example\.com$ [NC]
RewriteRule ^(.*)$ /site1/$1 [L]
RewriteCond %{HTTP_HOST} ^site2\.example\.com$ [NC]
RewriteRule ^(.*)$ /site2/$1 [L]
数据库驱动方式
在数据库中存储各分站配置,通过统一入口文件根据域名查询对应配置:

$domain = $_SERVER['HTTP_HOST'];
$stmt = $pdo->prepare("SELECT * FROM sites WHERE domain = ?");
$stmt->execute([$domain]);
$siteConfig = $stmt->fetch();
框架实现方案
使用PHP框架(如Laravel、Symfony)的多租户功能:
Laravel示例:

// 在AppServiceProvider中注册
$this->app->bind('currentSite', function() {
return Site::where('domain', request()->getHost())->first();
});
共享核心代码
通过抽象公共功能到核心模块,各分站继承或组合这些功能:
class CoreController {
protected $siteConfig;
public function __construct($config) {
$this->siteConfig = $config;
}
}
class Site1Controller extends CoreController {
public function index() {
// 使用$this->siteConfig
}
}
独立会话管理
确保各分站会话隔离:
ini_set('session.cookie_domain', '.example.com');
session_name('SITE_' . md5($currentDomain));
session_start();
静态资源处理
为不同分站配置独立的资源路径:
$resourcePath = "/assets/{$currentDomain}/";
echo "<link rel='stylesheet' href='{$resourcePath}style.css'>";
实现分站时需考虑SEO优化、缓存策略、数据隔离等关键因素,根据项目规模和需求选择合适的实现方案。






