php 实现多域名
实现多域名访问的PHP方法
在PHP中实现多域名访问通常涉及域名解析、服务器配置和代码逻辑处理。以下是几种常见的方法:
使用$_SERVER['HTTP_HOST']获取当前域名
通过全局变量$_SERVER['HTTP_HOST']可以获取当前访问的域名,根据不同的域名执行不同的逻辑:
$currentDomain = $_SERVER['HTTP_HOST'];
switch ($currentDomain) {
case 'domain1.com':
// 处理domain1.com的逻辑
break;
case 'domain2.com':
// 处理domain2.com的逻辑
break;
default:
// 默认处理
}
配置.htaccess文件实现URL重写
对于Apache服务器,可以在.htaccess文件中配置重写规则,将不同域名指向同一项目:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^domain1\.com$ [NC]
RewriteRule ^(.*)$ /path/to/domain1/$1 [L]
RewriteCond %{HTTP_HOST} ^domain2\.com$ [NC]
RewriteRule ^(.*)$ /path/to/domain2/$1 [L]
使用虚拟主机配置
在服务器配置中设置多个虚拟主机,指向同一个项目目录:
<VirtualHost *:80>
ServerName domain1.com
DocumentRoot /var/www/project
</VirtualHost>
<VirtualHost *:80>
ServerName domain2.com
DocumentRoot /var/www/project
</VirtualHost>
数据库驱动的多域名处理
对于内容管理系统,可以在数据库中存储域名与内容的映射关系:
// 查询数据库获取当前域名对应的配置
$domainConfig = $db->query("SELECT * FROM domains WHERE domain = '".$currentDomain."'");
if ($domainConfig) {
// 应用域名特定配置
}
使用框架的路由功能
现代PHP框架如Laravel、Symfony等都支持多域名路由:
// Laravel示例
Route::group(['domain' => 'domain1.com'], function() {
Route::get('/', function() {
return view('domain1.home');
});
});
Route::group(['domain' => 'domain2.com'], function() {
Route::get('/', function() {
return view('domain2.home');
});
});
处理跨域资源共享(CORS)
如果涉及API服务,需要配置CORS允许多个域名访问:
$allowedDomains = ['domain1.com', 'domain2.com'];
if (in_array($_SERVER['HTTP_ORIGIN'], $allowedDomains)) {
header("Access-Control-Allow-Origin: " . $_SERVER['HTTP_ORIGIN']);
}
会话和Cookie的域名设置
处理会话和Cookie时需要注意域名作用域:

// 设置Cookie为顶级域名,所有子域名共享
setcookie('name', 'value', time()+3600, '/', '.example.com');
实现多域名方案时,应根据具体需求选择合适的方法,考虑性能、安全性和维护成本等因素。对于简单的展示型网站,基于域名的条件判断即可;对于复杂应用,建议使用框架的路由功能或数据库驱动方案。






