【问题标题】:PHP Domain Mapping ScriptPHP 域映射脚本
【发布时间】:2012-01-31 09:18:28
【问题描述】:

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

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

【问题讨论】:

  • 我很确定您需要 Apache VirtualHosts 来实现这一点...您有根级服务器访问权限吗? (注意:这里假设 Apache,但这适用于所有类型的服务器)
  • 如果你还没有使用任何 url 编码或任何框架......那么你可以解析 url..好像“example.com/new/rajat”是值表单输入字段,那么你可以使它/home/user/public_html/new/rajat...您需要做的就是将 .com 之后的部分附加到 ..../public_html/
  • @Rajat 不。无论如何,目录名称并不重要。映射后,用户在使用 FTP 时将看不到 /home/user/public_html/copy1/,他们只会看到该目录下的文件。就像 redShadow 说的那样,我们可以将域名 slugify 并使用它。

标签: php mapping dns


【解决方案1】:

虽然您可以直接从您的 PHP 页面执行此操作,但我建议不要这样做,原因有很多,从高故障风险(例如,万一页面执行突然中断)到安全性风险(您的 httpd 用户将拥有对其自己的配置的写入权限 + 文件系统上不应有的一些内容)。

前段时间我写了一个类似的控件“网站创建控制面板”,它的工作方式几乎是这样的:

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

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

关于apache配置

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

首先,“slugify”您的域名。我通常采用(已清理!)域名,并用双破折号转换所有点(这不是有效的域名部分)。我不喜欢文件/目录名称中的点作为文件扩展名分隔的一部分。

然后,你可以创建这样的东西(假设域是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

当然,还要将您网站基目录的写入权限授予将用于运行脚本的用户。

【讨论】:

  • 如果我保护脚本并只允许少数选定的人访问表单怎么办?好点了吗?
  • 当然您必须使用某种登录/访问控制来保护“可见”脚本;在任何情况下,您都应该按照我的描述创建一些东西来执行这些管理任务,否则您很可能会遇到错误/安全问题。
  • @redShadow 你能帮我解决这个问题吗stackoverflow.com/questions/66022215/…
【解决方案2】:

我认为您需要将 VirtualHosts 添加到 apache 配置(例如 httpd.conf) 像这样:

服务器名称 example.com

DocumentRoot /home/user/public_html/copy1/

虚拟主机>

用于虚拟主机配置的 Apache 文档:

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

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

【讨论】:

    【解决方案3】:

    现在已经 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 甚至您的自定义脚本。

    希望它对正在阅读本文的人有所帮助。谢谢。

    【讨论】:

    猜你喜欢
    • 2020-07-23
    • 1970-01-01
    • 2018-10-17
    • 2021-05-22
    • 2016-10-10
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多