我不知道这个的确切术语是什么,所以我的标题可能不正确。
基本上我要做的是编写一个包含输入字段的PHP脚本:
Domain Name: <input type='text' name='dname' id='dname' value='http://example.com' />
<input type='submit' name='addname' value='Add A Domain' />
当用户在文本字段中键入自己的域并按提交时,脚本将自动创建一个目录,在那里复制一些PHP脚本并将域名映射到那里。 (当然,域名指向我们的服务器。)
我已经找到了mkdir()和copy()部分,但我无法弄清楚映射部分。如何使用PHP自动添加条目http://example.com到/ home / user / public_html / copy1 /?
答案 0 :(得分:2)
虽然您可以直接从您的PHP页面执行此操作,但我建议不要这样做,出于多种原因,从高失败风险(例如,如果页面执行突然中断)到安全性风险(您的httpd用户将拥有对自己的配置的写访问权限+文件系统上的一些不应该的东西)。
有些时候我写了一个类似的控件“网站创建控制面板”,它的工作原理很简单:
第二个脚本可以用你喜欢的任何语言编写,PHP,Python,Bash,......
要创建“映射”到您的域的目录,您可以使用以下内容:
首先,“slugify”您的域名。我通常采用(已消毒的!)域名,并使用双破折号(不是有效的域名部分)转换所有点。我不喜欢文件/目录名中的点是文件扩展名分离的一部分。
然后,你可以创建这样的东西(假设domain是www.example.com
):
<VirtualHost *:80>
ServerName www.exampple.com
DocumentRoot `/my-sites/wwwroot/www--example--com`
<Directory "/my-sites/wwwroot/www--example--com">
Options -Indexes FollowSymLinks
Order allow,deny
Allow from all
AllowOverride All
</Directory>
ErrorLog /var/log/apache2/www--example--com_error.log
CustomLog /var/log/apache2/www--example--com_access.log vhost_combined
</VirtualHost>
<VirtualHost *:80>
## redirect non-www to www
ServerName www.example.com
ServerAlias example.com
RedirectMatch permanent ^(.*) http://www.example.com$1
</VirtualHost>
假设您将站点文件放在/my-sites/wwwroot/www--example--com
等目录中。
就我而言,我也希望不以root身份运行第二个脚本;为此,您必须添加一些更改,以便让权限较低的用户在您的系统上执行某些操作:
/my-sites/conf/vhosts
Include "/my-sites/conf/vhosts/*.vhost"
,并启用它然后,让您的用户重新加载apache配置,方法是安装sudo
并将其添加到/etc/sudoers
:
Cmnd_Alias A2RELOAD = /usr/sbin/apache2ctl graceful
youruser ALL=NOPASSWD: A2RELOAD
%yourgroup ALL = NOPASSWD: A2RELOAD
当然,还会为您的网站基本目录提供对用于运行脚本的用户的写入权限。
答案 1 :(得分:0)
我认为您需要将VirtualHosts添加到apache配置(例如httpd.conf) 像这样:
&lt; VirtualHost *:80&gt;
ServerName example.com
DocumentRoot / home / user / public_html / copy1 /
&LT; /虚拟主机&GT;
虚拟主机配置的Apache文档:
答案 2 :(得分:0)
现在已经超过10个月了,所以我只是建议我找到的东西。
虽然直接写入httpd.conf似乎是唯一的方法,但最近我们的网站更改了服务器。它导致我们在这些文件/文件夹许可方面遇到很多麻烦,托管公司因安全问题拒绝帮助我们。
所以我再看看并发现我使用CPanel进行托管,我当然可以使用Addon Domain功能来创建和添加新域。
但它有其局限性。由于它是一个插件域,我们不能再限制每个域的带宽和磁盘使用量。一切都是共享的。但无论如何,这对我们来说无关紧要。
到目前为止它的确有效。您可以使用官方cpanel网站上提供的CPanel API库来执行此操作,也可以使用直接URL请求方式来创建域。由于我们正在进行新的wordpress安装,我们也创建了一个新的数据库。
http://{username}:{password}@{mysite.com}:2082/frontend/x3/sql/addb.html?db={dbname}
http://{username}:{password}@{mysite.com}:2082/frontend/x3/sql/adduser.html?user={dbuser}&pass={dbpass}
http://{username}:{password}@{mysite.com}:2082/frontend/x3/sql/addusertodb.html?db={dbname}&user={dbuser}&ALL=ALL
http://{username}:{password}@{mysite.com}:2082/frontend/x3/addon/doadddomain.html?domain={newsite.com}&user={ftp_user}&dir={ftp_dir}&pass={ftp_pass}&pass2={ftp_pass}
它不一定是wordpress。您可以使用它来安装joomla,drupal,phpbb甚至是自定义脚本。
希望它可以帮助任何阅读此内容的人。感谢。