DirectAdmin 模板是什么?
DirectAdmin 模板是一系列文本文件,它们定义了 DirectAdmin 界面上显示的各种页面、邮件通知、配置文件生成规则等,当你在 DirectAdmin 中执行某个操作(如创建用户、修改域名设置)时,DirectAdmin 会调用相应的模板文件,将动态数据(如用户名、域名、IP地址等)填充进去,最终生成用户看到的 HTML 页面或服务器上的配置文件。

模板就是 “静态结构” + “动态占位符” 的结合体。
模板的类型和存放位置
DirectAdmin 的模板主要分为两大类:用户界面模板 和 系统/配置文件模板,它们存放在不同的目录中。
用户界面模板
这些模板控制着 DirectAdmin 用户和管理员在浏览器中看到的页面。
- 存放位置:
/usr/local/directadmin/data/templates/ - 子目录:
language/: 存放语言包文件(.lang),这些文件本身也是一种特殊的模板,用于界面文字的翻译。accounts/: 用户账户相关的页面模板,如注册、登录、账户信息等。domains/: 域名管理相关的页面模板,如 DNS 管理、文件管理器、FTP 账户等。resellers/: 经销商管理相关的页面模板。admin/: 管理员管理相关的页面模板。custom/: 极其重要! 这是自定义模板的目录,如果你修改了官方模板,官方更新后你的修改会被覆盖,所有自定义都应该在这个目录下进行,你可以将官方模板复制到这里进行修改。
系统/配置文件模板
这些模板是 DirectAdmin 自动化配置服务器的关键,当创建用户、添加域名时,DirectAdmin 会使用这些模板来生成实际的配置文件(如 Apache/Nginx 的虚拟主机文件、DNS 区域文件、Exim 邮件配置等)。

- 存放位置:
/usr/local/directadmin/data/templates/ - 重要子目录:
custom/: 同样,所有自定义的系统模板都应该放在这里。virtual_host*.conf: 用于生成 Web 服务器(Apache/Nginx)的虚拟主机配置。named.conf: 用于生成 DNS 服务器的配置。spamd.conf: 用于生成 SpamAssassin 的配置。exim.conf: 用于生成 Exim 邮件服务器的配置。quota.conf: 用于生成磁盘配额配置。user/: 为每个用户生成配置时使用的模板。domain/: 为每个域名生成配置时使用的模板。
模板的基本语法
DirectAdmin 模板使用简单的标签语法来插入动态数据。
变量
变量是模板中最常见的元素,用花括号 包裹。
-
示例:
{username}: 会被替换为当前用户的用户名。{domain}: 会被替换为当前域名。ip: 会被替换为服务器的 IP 地址。email: 会被替换为用户的邮箱地址。
-
如何知道有哪些变量可用? DirectAdmin 在处理模板时,会根据上下文提供一系列预定义的变量,最可靠的方法是查看 DirectAdmin 自带的模板文件,观察它们在不同场景下使用了哪些变量,你也可以通过
echo "show; template_vars"命令(在 DA 命令行下)来查看某些特定操作的可用变量,但这比较复杂。
(图片来源网络,侵删)
条件语句
用于根据条件显示或隐藏内容。
-
语法:
{if condition} ... 内容1 ... {else} ... 内容2 ... {endif} -
示例:
{if has_ssl} <a href="https://{domain}">访问 HTTPS 版本</a> {else} <a href="http://{domain}">访问 HTTP 版本</a> {endif}has_ssl是一个布尔变量,如果域名启用了 SSL,则为真。
循环语句
用于遍历列表,例如显示一个用户的所有域名或所有 FTP 账户。
-
语法:
{loop name="list_name"} {value} {key} {endloop} -
示例: 在显示用户所有域名的列表时:
<ul> {loop name="domains"} <li><a href="/domain/{value}">{value}</a></li> {endloop} </ul>这里
{value}会循环替换为每个域名。
如何修改和使用模板(实战案例)
重要原则: 修改前务必备份原始模板,所有修改都应在 /usr/local/directadmin/data/templates/custom/ 目录下进行。
案例 1:修改用户登录后的欢迎页面
假设你想在用户登录后,欢迎页面显示服务器的 IP 地址。
-
找到原始模板:
- 登录页面模板通常在
/usr/local/directadmin/data/templates/accounts/login.html。 - 登录成功后重定向的页面或欢迎信息可能在
/usr/local/directadmin/data/templates/accounts/index.html或类似文件中,让我们假设是index.html。
- 登录页面模板通常在
-
复制到自定义目录:
cp /usr/local/directadmin/data/templates/accounts/index.html /usr/local/directadmin/data/templates/custom/accounts/index.html
-
编辑自定义模板: 使用
vi或nano编辑/usr/local/directadmin/data/templates/custom/accounts/index.html。 假设文件中有一行<h1>Welcome, {username}!</h1>,你想在下面添加一行显示 IP。修改为:
<h1>Welcome, {username}!</h1> <p>You are logged into server: {ip}</p> -
应用更改: 修改模板文件后,需要让 DirectAdmin 重新编译模板。
# 进入 DA 的 scripts 目录 cd /usr/local/directadmin/scripts # 运行模板更新脚本 ./build_all_templates.sh
运行此脚本后,所有用户再次登录时就会看到更新后的页面。
案例 2:为每个新创建的用户添加一个自定义的 PHP 文件
这个案例更高级,涉及到系统模板,假设你想在每个新用户的网站根目录下自动创建一个 info.php 文件。
-
找到并复制用户创建模板: 与域名创建相关的文件通常在
domain/目录下,我们需要找到在创建用户时执行文件操作的模板,这通常在user模板中,或者在create_post.sh脚本中处理,但更直接的方式是修改virtual_host*.conf模板,让它包含一个自定义的指令,但这很复杂。一个更简单的方法是使用
create_post.sh脚本,它会在用户创建后执行,这个脚本位于/usr/local/directadmin/scripts/custom/,如果目录不存在,请创建它。 -
创建或编辑
create_post.sh:mkdir -p /usr/local/directadmin/scripts/custom vi /usr/local/directadmin/scripts/custom/create_post.sh
-
编写脚本内容: 脚本需要接收用户名作为参数,内容如下:
#!/bin/bash # DA 会将用户名作为第一个参数传递 USERNAME=$1 # 用户网站根目录 USER_DIR="/home/${USERNAME}/domains" # 检查用户目录是否存在 if [ -d "${USER_DIR}" ]; then # 遍历用户下的所有域名目录 for DOMAIN_DIR in ${USER_DIR}/*; do if [ -d "${DOMAIN_DIR}" ]; then # 创建 info.php 文件 echo "<?php phpinfo(); ?>" > "${DOMAIN_DIR}/public_html/info.php" echo "Created info.php for $(basename ${DOMAIN_DIR})" fi done fi -
赋予执行权限:
chmod +x /usr/local/directadmin/scripts/custom/create_post.sh
-
测试: 现在当你通过 DirectAdmin 创建一个新用户时,该脚本会自动执行,并在该用户所有域名的
public_html目录下创建info.php文件。
主题与模板的关系
DirectAdmin 的 主题 本质上是一套预定义好的 UI 模板集合,它们存放在 /usr/local/directadmin/data/skins/ 目录下。
- 当你选择一个主题(如
default,evolution)时,DirectAdmin 会优先从/usr/local/directadmin/data/skins/{theme_name}/templates/目录下查找模板。 - 如果在该主题目录下找不到,它会回退到
/usr/local/directadmin/data/templates/目录。 custom目录的优先级最高:如果同时在主题目录和/templates/custom/目录下存在同名模板,DirectAdmin 一定会优先使用custom目录下的版本,这就是为什么所有自定义都应该放在custom目录下的原因。
实用工具和资源
-
build_all_templates.sh:- 位置:
/usr/local/directadmin/scripts/ - 作用: 重新编译所有模板,使修改生效,这是修改 UI 模板后必须执行的命令。
- 位置:
-
build_confs.sh:- 位置:
/usr/local/directadmin/scripts/ - 作用: 重新生成所有用户的配置文件(如虚拟主机、DNS 等),当你修改了系统模板(如
virtual_host.conf)后,需要运行此脚本来让所有用户(或指定用户)的配置文件更新。
- 位置:
-
官方文档:
- DirectAdmin 官方文档中关于模板的部分是最权威的参考,虽然有时比较简略,可以查阅 Customizing Templates 相关页面。
-
社区和论坛:
- DirectAdmin 的官方论坛和社区(如
forums.directadmin.com)是解决模板问题的最佳场所,你可以找到很多现成的解决方案和经验分享。
- DirectAdmin 的官方论坛和社区(如
| 特性 | 说明 |
|---|---|
| 核心功能 | 自动化生成配置文件和用户界面,实现批量定制。 |
| 关键目录 | /usr/local/directadmin/data/templates/ (核心) 和 /usr/local/directadmin/data/templates/custom/ (自定义)。 |
| 语法 | 简单的 {variable}, {if/else/endif}, {loop/endloop}。 |
| 操作流程 | 备份 -> 复制到 custom -> 编辑 -> 运行 build_all_templates.sh 或 build_confs.sh。 |
| 主题 | 一套 UI 模板集合,custom 目录的优先级最高。 |
掌握 DirectAdmin 模板是成为 DirectAdmin 高级管理员的必经之路,它能让你极大地提升工作效率和服务器的可维护性。
