分站实现php
PHP 分站实现方法
多域名绑定同一目录
通过配置虚拟主机或.htaccess文件,将多个域名指向同一个目录。在PHP中通过$_SERVER['HTTP_HOST']获取当前访问域名,动态加载对应内容。
<VirtualHost *:80>
ServerName site1.com
DocumentRoot /var/www/html
</VirtualHost>
<VirtualHost *:80>
ServerName site2.com
DocumentRoot /var/www/html
</VirtualHost>
子目录方式实现 在网站根目录创建子文件夹作为分站,每个分站有独立入口文件。通过URL重写隐藏子目录路径。
RewriteEngine On
RewriteCond %{HTTP_HOST} ^sub\.example\.com$ [NC]
RewriteRule ^(.*)$ /subsite/$1 [L]
数据库驱动分站 在数据库中存储各分站配置,通过统一入口文件加载不同配置。适合需要集中管理的多站点系统。
$domain = $_SERVER['HTTP_HOST'];
$config = $db->query("SELECT * FROM sites WHERE domain = '$domain'")->fetch();
多语言分站实现 使用PHP的gettext扩展或数组实现多语言,通过URL参数或子域名切换语言版本。
$lang = substr($_SERVER['HTTP_HOST'], 0, 2);
putenv("LANG=$lang");
setlocale(LC_ALL, $lang);
bindtextdomain("messages", "./locale");
注意事项

- 各分站共享PHP进程,需注意会话隔离
- 静态资源建议使用CDN或独立域名
- 分站间跳转需处理URL保持一致性
- 日志系统需区分各分站访问记录
性能优化方案
OPcache配置 启用PHP的OPcache加速,特别适合多站点共享代码的场景。
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
独立缓存策略 为每个分站配置独立缓存前缀,避免数据混淆。
$cacheKey = $_SERVER['HTTP_HOST'].'_'.$originalKey;
$cache->set($cacheKey, $data, 3600);
负载均衡方案 当分站流量较大时,可采用Nginx负载均衡,将请求分发到多个PHP-FPM进程池。

upstream php_servers {
server 127.0.0.1:9000;
server 127.0.0.1:9001;
}
安全防护措施
输入过滤 所有分站共享安全策略,需统一处理用户输入。
$cleanInput = filter_var($_POST['input'], FILTER_SANITIZE_STRING);
CSRF防护 为每个分站生成独立的CSRF令牌,防止跨站请求伪造。
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
文件上传隔离 不同分站的上传文件应存储到独立目录,设置适当权限。
$uploadDir = '/uploads/'.preg_replace('/[^a-z0-9]/i', '', $_SERVER['HTTP_HOST']);






