自动子域创建亚马逊ec2
答
如果您使用的是Apache Web服务器和和Fedora Linux,您必须执行以下操作
在你的dns中添加一个通配符条目。假设你的域名是demo.com的dns条目如
*.demo.com IN A 192.168.1.100
用你的ip替换ip。
然后anything.demo.com会来到您的服务器。
我们必须配置apache来处理子域。
对于我们必须
- 创建文档根文件夹
- 创建虚拟主机文件和
- 重启Apache
以下PHP每个子域是符合上述理念。
<?php
define('DOMAIN','demo.com');
define('DOCROOT','/home/username/www/');
define('CONF_FOLDER','/etc/httpd/conf.d/');
/*
* Function to create conf file in conf.d folder
*/
function createNewVhostFile($subdomain) {
$filename = CONF_FOLDER.$subdomain.'.conf';
$fh = fopen($filename, 'w') or die("can't open file");
$servername = $subdomain.".".DOMAIN;
$docroot = DOCROOT.$subdomain;
$virtualhost = <<<HEREDOC
<VirtualHost $servername >
DocumentRoot $docroot
ServerName $servername
ServerAlias $servername
</VirtualHost>
HEREDOC;
fwrite($fh, $virtualhost);
fclose($fh);
}
/*
* Function to restart apache
*/
function restartApache() {
$configtest = `apachectl configtest 2>&1`;
echo $configtest;
if(strtolower(trim($configtest)) == 'syntax ok'){
$restart = `/etc/init.d/httpd restart 2>&1`;
echo $restart;
}
}
/*
* Create document root folder.
*/
function createDocRoot($subdomain){
$docroot = DOCROOT.$subdomain;
if(is_dir($subdomain)){
echo "Document root allready exists.";
}else{
mkdir($docroot,644);
}
}
$subdomain = "sub";
createDocRoot($subdomain);
createNewVhostFile($subdomain);
restartApache();
?>
您必须以root用户身份运行此脚本。在虚拟主机配置文件中,您可以添加更多选项。您也可以检查similar question问题的答案。
希望有所帮助。
答
你实际上可以利用RewriteMap。它可以让你映射域名(以及你想分支出来的情况)。
像这样的东西应该工作 -
RewriteMap lowercase int:tolower
RewriteMap domainname txt:/var/conf/domain.map
RewriteCond ${lowercase:%{SERVER_NAME}} ^(.+)$
RewriteCond ${domainname:%1} ^(/.*)$
RewriteRule ^/(.*)$ %1/$1 [L,NC,QSA]
现在你可以使用PHP或任何创造条件,按照这个格式文件domain.map -
<domain name> <targeted path on the server>
域/子域和目标服务器上的路径。
因此,例如。
example.com /myvirtualhostingserver/examplesite
subdomain.demo.com /myvirtualhostingserver/subdomain
现在你只需要将example.com指向你的服务器!
此方法允许您保持子域文件夹的名称与子域的名称无关(完全取决于您的用例)。