PHP域映射脚本

时间:2012-01-01 14:25:36

标签: php mapping dns

我不知道这个的确切术语是什么,所以我的标题可能不正确。

基本上我要做的是编写一个包含输入字段的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 /?

3 个答案:

答案 0 :(得分:2)

虽然您可以直接从您的PHP页面执行此操作,但我建议不要这样做,出于多种原因,从高失败风险(例如,如果页面执行突然中断)到安全性风险(您的httpd用户将拥有对自己的配置的写访问权限+文件系统上的一些不应该的东西)。

有些时候我写了一个类似的控件“网站创建控制面板”,它的工作原理很简单:

  • php脚本接收网站创建请求并将其存储在某处(例如,在数据库中)。点。
  • 另一个脚本,通过cron以root身份运行,比方说,五分钟检查网站创建请求队列。如果有的话:
    • 将网站创建任务标记为“已锁定”
    • 在适当的位置创建目录,填充脚本等。
    • 根据需要更改所有权限
    • 创建新的虚拟主机配置并启用它
    • 让网络服务器重新加载自己的配置
    • 将网站创建任务标记为“已完成”

第二个脚本可以用你喜欢的任何语言编写,PHP,Python,Bash,......

关于apache配置

要创建“映射”到您的域的目录,您可以使用以下内容:

首先,“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
  • 创建一个包含以下行的apache虚拟主机: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文档:

http://httpd.apache.org/docs/2.2/vhosts/name-based.html

http://httpd.apache.org/docs/2.2/vhosts/mass.html

答案 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甚至是自定义脚本。

希望它可以帮助任何阅读此内容的人。感谢。