如果我没记错的话,在
ServerAlias
中,您可以使用通配符,并且通过 mod_rewrite 模块将其重写为正确的文件,因此您的虚拟主机会像这样:
<VirtualHost *:80>
ServerName mysaasapp.com
ServerAlias *.mysaasapp.com
DocumentRoot /var/www/user
</VirtualHost>
你的CNAME应该像这样
*.mysaasapp.com IN CNAME mysaasapp.com
希望这可以帮到你。
编辑:
将虚拟主机更改为以下内容
<VirtualHost *:80>
ServerName mysaasapp.com
ServerAlias *.mysaasapp.com
DocumentRoot [STANDARDFOLDER]
</VirtualHost>
请将[STANDARDFOLDER]
替换为mysaasapp.com的DocumentRoot
在您的index.php
顶部放置以下内容:
$_notUsers = array("www");
$_domainParts = explode('.',$_SERVER[HTTP_HOST],-2);
if(!in_array($_domainParts[0],$_notUsers) && !empty($_domainParts)){
$_sub = str_replace('.mysaasapp.com','',$_SERVER['HTTP_HOST']);
$_GET['user'] = $_sub;
include 'user.php';
exit;
}
这是一种非常简陋的解决方案,希望现在它可以解决您的问题。
更新:
起初我并不知道您还想从自定义域名进行重定向,
然后他们需要在DNS服务器/管理器中添加CNAME记录
theirdomain.com IN CNAME thierusername.mysaasapp.com
如果您的DNS记录使所有子域名都指向您的apache,那么应该使用我给您的代码和Vhosts来工作。
更新2:
lanzz刚刚指出我忘了一件事(扇面),我正在检查HOST头,这是没有意义的,因为它将具有customdomain.com,所以您需要询问用户的域名(如果您没有共享IP,请让他们使用CNAME进行指向,如果您没有共享IP,您可以让他们使用A记录指向您的IP),并从HTTP_HOST中查找该域名,并在数据库中搜索该域名,之后它就应该工作了!
稍微编辑过的代码:
$_notUsers = array("www");
$_domainParts = explode(".",$_SERVER["HTTP_HOST"]);
$_domainPartsLength = count($_domainParts);
$_currentDomain = $_domainParts[$_domainPartsLength-1] . "." . $_domainParts[$_domainPartsLength-2];
if($_currentDomain == "mysaasapp.com"){
if(!in_array($_domainParts[0],$_notUsers) && !empty($_domainParts)){
$_sub = str_replace('.mysaasapp.com','',$_SERVER['HTTP_HOST']);
$_GET['user'] = $_sub;
include 'user.php';
exit;
}
}else{
$_user = userGetByDomain($_SERVER["HTTP_HOST"]);
if($_user === false){
header("Status: 404 Not Found");
include '404.php';
exit;
}
$_GET['user'] = $_user;
include 'user.php';
exit;
}