php 实现多域名
实现多域名的方法
在 PHP 中实现多域名支持通常涉及动态配置、路由解析或框架级别的处理。以下是几种常见的方法:
动态配置域名
通过配置文件或数据库存储多个域名,运行时根据请求的域名动态加载对应的配置。
$allowedDomains = [
'example.com',
'example.net',
'example.org'
];
$currentDomain = $_SERVER['HTTP_HOST'];
if (in_array($currentDomain, $allowedDomains)) {
// 加载对应域名的配置
$config = require "config/{$currentDomain}.php";
}
使用 .htaccess 重定向
通过 Apache 的 .htaccess 文件将不同域名指向同一入口文件,再由 PHP 处理路由。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(www\.)?example\.com$ [NC]
RewriteRule ^(.*)$ index.php?domain=example.com [L,QSA]
RewriteCond %{HTTP_HOST} ^(www\.)?example\.net$ [NC]
RewriteRule ^(.*)$ index.php?domain=example.net [L,QSA]
框架路由处理
在 Laravel 等框架中,可以通过中间件或路由组实现多域名逻辑。
Route::group(['domain' => 'example.com'], function () {
Route::get('/', function () {
return view('home.example_com');
});
});
Route::group(['domain' => 'example.net'], function () {
Route::get('/', function () {
return view('home.example_net');
});
});
动态数据库查询
根据域名从数据库加载不同的内容或模板。
$domain = $_SERVER['HTTP_HOST'];
$site = DB::table('sites')->where('domain', $domain)->first();
if ($site) {
$template = $site->template;
include "templates/{$template}.php";
}
虚拟主机配置
在服务器层面配置多个虚拟主机,共享同一套代码库但使用不同的环境变量。
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/html
SetEnv SITE_CONFIG /etc/sites/example.com.conf
</VirtualHost>
<VirtualHost *:80>
ServerName example.net
DocumentRoot /var/www/html
SetEnv SITE_CONFIG /etc/sites/example.net.conf
</VirtualHost>
注意事项
- 确保正确处理 HTTPS 和域名重定向,避免 SEO 问题。
- 使用缓存机制优化多域名配置的性能。
- 考虑使用共享会话或独立会话策略,取决于业务需求。
- 对于国际化场景,可以结合域名实现语言自动切换。







