wp-config.php 文件 – 深入了解如何配置 WordPress

WordPress 安装实例最重要的文件之一是配置文件。它驻留在根目录中,并包含恒定的定义和 PHP 指令,使 WordPress 按照您想要的方式工作。
wp-config.php 文件存储数据,如数据库连接详细信息、表前缀、特定目录的路径以及与我们将在本文中深入探讨的特定功能相关的许多设置。


基本 wp-config.php 文件

首次安装 WordPress 时,系统会要求您输入所需的信息,例如数据库详细信息和表前缀。有时您的主机会为您设置 WordPress,您不需要手动运行设置。但是,当您手动运行 5 分钟安装时,系统会要求您输入存储在 wp-config 中的一些最相关的数据。

set-up
运行设置时,您将需要输入存储在 wp-config.php 文件中的数据

下面是一个基本的 wp-config.php 文件:

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define('DB_NAME', 'database_name_here');

/** MySQL database username */
define('DB_USER', 'username_here');

/** MySQL database password */
define('DB_PASSWORD', 'password_here');

/** MySQL hostname */
define('DB_HOST', 'localhost');

/** Database Charset to use in creating database tables. */
define('DB_CHARSET', 'utf8');

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

define('AUTH_KEY',		'put your unique phrase here');
define('SECURE_AUTH_KEY',	'put your unique phrase here');
define('LOGGED_IN_KEY',		'put your unique phrase here');
define('NONCE_KEY',		'put your unique phrase here');
define('AUTH_SALT',		'put your unique phrase here');
define('SECURE_AUTH_SALT',	'put your unique phrase here');
define('LOGGED_IN_SALT',	'put your unique phrase here');
define('NONCE_SALT',		'put your unique phrase here');

$table_prefix  = 'wp_';

/* That's all, stop editing! Happy blogging. */

通常,此文件是在您运行设置时自动生成的,但有时 WordPress 没有写入安装文件夹的权限。在这种情况下,您应该创建一个空的 wp-config.php 文件,从 wp-config-sample.php 复制和粘贴内容,并为所有定义的常量设置适当的值。完成后,将文件上传到根文件夹并运行 WordPress。

注意:常量定义和 PHP 指令是按特定顺序出现的,我们永远不应该更改。我们永远不应该在以下评论行下添加内容:

/* That's all, stop editing! Happy blogging. */

首先,是您应该从主机收到的数据库常量的定义:

  • DB_NAME
  • DB_USER
  • DB_PASSWORD
  • DB_HOST
  • DB_CHARSET
  • DB_COLLATE

根据数据库详细信息,八个安全密钥将使网站更加安全,免受黑客攻击。当您运行安装时,WordPress 将自动生成安全密钥和 salt 密钥,但您可以随时更改它们,添加任意字符串。为了获得更好的安全性,请考虑使用在线生成器。

$table_prefixvariable 存储所有 WordPress 表的前缀。不幸的是,任何人都知道它的默认值,这可能会使 WordPress 数据库面临漏洞,这可以通过在运行设置时设置自定义值来轻松修复。
要更改工作网站中的表前缀,您应该对数据库运行多个查询,然后手动编辑 wp-config.php 文件。如果您无权访问数据库,或者您不具备构建自定义查询所需的知识,那么您可以安装一个插件,例如 Change Table Prefix,它将重命名数据库表和字段名称,并毫无风险地更新配置文件。$table_prefix

注意:备份 WordPress 文件和数据库是一种很好的做法,即使您将使用插件更改表前缀。

到目前为止,分析仅限于基本配置。但是我们可以定义许多常量来启用功能、自定义和保护安装。


在基本配置上:编辑文件系统

WordPress 文件系统为用户和黑客所熟知。因此,您可以考虑通过将特定文件夹移动到任意位置并在 wp-config 文件中设置相应的 URL 和路径来更改内置文件结构。
首先,我们可以通过定义两个常量来移动 content 文件夹。第一个选项设置完整的目录路径:

define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/site/wp-content' );

第二个选项设置新的目录 URL:

define( 'WP_CONTENT_URL', 'http://example.com/site/wp-content' );

我们可以通过定义以下常量来只移动插件文件夹:

define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/wp-content/mydir/plugins' );
define( 'WP_PLUGIN_URL', 'http://example.com/wp-content/mydir/plugins' );

同样,我们可以通过设置新的目录路径来移动 uploads 文件夹:

define( 'UPLOADS', 'wp-content/mydir/uploads' );

注: 所有路径都是相对于ABSPATH的,并且它们不应包含前导斜杠。

完成后,排列文件夹并重新加载 WordPress。

The image shows the built-in file structure compare
该图显示了内置文件结构与自定义结构的比较

无法从 wp-config 文件中移动 /wp-content/themes 文件夹,但我们可以在插件或主题的函数文件中注册新的主题目录。


面向开发人员的功能:调试模式和保存查询

如果您是开发人员,您可以强制 WordPress 显示错误和警告,这将有助于您进行主题和插件调试。要启用调试模式,您只需将 value 设置为 true,如下所示:WP_DEBUG

define( 'WP_DEBUG', true );

WP_DEBUG默认设置为 false。如果需要禁用调试模式,只需删除定义,或将常量的值设置为 false。
当您在实时站点上工作时,您应该禁用调试模式。绝不应向网站查看者显示错误和警告,因为它可能会为黑客提供有价值的信息。但是,如果您仍然必须进行调试怎么办?
在这种情况下,您可以强制 WordPress 将错误和警告的内存保存在 /wp-content 文件夹中debug.log文件中。要启用此功能,请将以下代码复制并粘贴到 wp-config.php 文件中:

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );

要使此功能正常工作,我们首先需要启用 debug 模式。然后,设置为 true 时,我们强制 WordPress 将消息存储到debug.log文件中,同时设置为 false 时,我们会在屏幕上隐藏它们。最后,我们将 PHP 变量的值设置为 0,这样错误消息就不会打印到屏幕上。wp-config 永远不会从缓存中加载。因此,这是覆盖 php.ini 设置的好地方。WP_DEBUG_LOG WP_DEBUG_DISPLAY display_errors

请注意: 这是一个很棒的功能,您可以利用它来注册 WordPress 不会在屏幕上显示的消息。例如,当publish_post触发操作时,WordPress 会加载一个保存数据的脚本,然后将用户重定向到帖子编辑页面。在这种情况下,您可以注册消息,但不能在屏幕上显示它们。

另一个调试常量确定要加载的脚本和样式的版本。如果要加载未压缩的版本,请设置为 true:SCRIPT_DEBUG

define( 'SCRIPT_DEBUG', true );

如果您的主题或插件显示从数据库中检索的数据,则可能需要存储查询详细信息以供后续查看。常量强制 WordPress 将查询信息存储到数组中。将打印这些详细信息,并将以下代码添加到页脚模板中:SAVEQUERIES $wpdb->queries

if ( current_user_can( 'administrator' ) ) {
        global $wpdb;
        echo '<pre>';
        print_r( $wpdb->queries );
        echo '</pre>';
}

有关此功能的更深入分析,请参阅如何在 WordPress 中构建高效查询。


当您的网站发展壮大时,您可能希望减少帖子修订的数量。默认情况下,WordPress 每 60 秒自动保存一次修订。我们可以通过在 wp-config 中设置自定义间隔来更改此值,如下所示:

define( 'AUTOSAVE_INTERVAL', 160 );

当然,您也可以减少自动保存间隔。
每次我们保存编辑时,WordPress 都会在 posts 表中添加一行,以便我们可以恢复帖子和页面的先前修订。这是一个有用的功能,当我们的网站发展壮大时,它可能会变成一个问题。幸运的是,我们可以减少要存储的帖子修订的最大数量,或者完全禁用该功能。
如果要禁用 post revisions,请定义以下常量:

define( 'WP_POST_REVISIONS', false );

如果要限制最大修订数,请添加以下行:

define( 'WP_POST_REVISIONS', 10 );

默认情况下,WordPress 会将垃圾帖子、页面、附件和评论存储 30 天,然后永久删除它们。我们可以使用以下常量更改此值:

define( 'EMPTY_TRASH_DAYS', 10 );

我们甚至可以禁用垃圾箱,将其值设置为 0,但考虑到 WordPress 将不再允许您恢复内容。


允许的内存大小

有时,您可能会收到如下消息:

致命错误:允许的 xxx 字节内存大小已用尽…

最大内存大小取决于服务器配置。如果您无法访问php.ini文件,您可以通过在 wp-config 文件中设置常量来增加 WordPress 的内存限制。默认情况下,WordPress 尝试为单个站点分配 40Mb 给 PHP,为多站点安装分配 64MB。当然,如果 PHP 分配的内存大于 40Mb(或 64Mb),WordPress 将采用最大值。
话虽如此,您可以使用以下行设置自定义值:WP_MEMORY_LIMIT

define( 'WP_MEMORY_LIMIT', '128M' );

如果需要,您还可以使用以下语句设置最大内存限制:

define( 'WP_MAX_MEMORY_LIMIT', '256M' );

推荐阅读: 如何在 WordPress 中提高 PHP 内存限制.


自动更新

从版本 3.7 开始,WordPress 支持安全版本的自动更新。这是一项重要功能,允许网站管理员始终确保其网站安全。
您可以通过定义以下常量来禁用所有自动更新:

define( 'AUTOMATIC_UPDATER_DISABLED', true );

也许禁用安全更新不是一个好主意,但这是您的选择。
默认情况下,自动更新不适用于主要版本,但您可以启用任何核心更新,定义如下:WP_AUTO_UPDATE_CORE

# Disables all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );

# Enables all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );

默认值为 :minor

define( 'WP_AUTO_UPDATE_CORE', 'minor' );

附加常量将禁用自动更新(以及对任何文件的任何更新或更改)。如果设置为 true,则所有文件编辑都将被禁用,甚至主题和插件的安装和更新也将被禁用。因此,不建议使用它。DISALLOW_FILE_MODS

安全设置

我们可以使用 wp-config 文件来提高站点安全性。除了我们上面看到的文件结构的更改之外,我们还可以锁定一些可能打开不必要漏洞的功能。首先,我们可以禁用管理面板中提供的文件编辑器。以下常量将隐藏 Appearance Editor 屏幕:

define( 'DISALLOW_FILE_EDIT', true );

注意:如果将此常量定义为 true,则某些插件无法正常工作。

disallow_file_edit
disallow_file_edit

安全功能是通过 SSL 进行管理。如果您购买了 SSL 证书,并且已正确配置,您可以强制 WordPress 在任何登录和管理会话中通过 SSL 传输数据。使用以下常量:

define( 'FORCE_SSL_ADMIN', true );

如果您需要有关通过 SSL 进行管理的更多信息,请查看 Codex。

其他两个常量允许阻止外部请求并列出允许的主机。

define( 'WP_HTTP_BLOCK_EXTERNAL', true );
define( 'WP_ACCESSIBLE_HOSTS', 'example.com,*.anotherexample.com' );

在此示例中,我们首先禁用了来自外部主机的所有访问,然后列出了允许的主机,用逗号分隔(允许使用通配符)。


其他高级设置

WP_CACHE设置为 true 包括 wp-content/advanced-cache.php 脚本。此常量仅在您安装持久缓存插件时有效。

CUSTOM_USER_TABLE,用于设置除默认 wp_users 和 wp_usermeta 表以外的自定义用户表。这些常量启用了一项有用的功能,允许站点用户仅使用一个帐户访问多个网站。要使此功能正常工作,所有安装都应共享同一个数据库。CUSTOM_USER_META_TABLE

从 2.9 版本开始,WordPress 支持自动数据库优化。借助此功能,设置为 true,WordPress 将自动修复损坏的数据库。WP_ALLOW_REPAIR

每次编辑图像时,WordPress 都会创建一组新的图像。如果要恢复原始图像,则所有生成的集都将保留在服务器上。您可以通过设置为 true 来覆盖此行为,以便在恢复原始图像时,所有编辑都将从服务器中删除。IMAGE_EDIT_OVERWRITE

锁定wp-config.php

现在我们知道为什么 wp-config.php 是最重要的 WordPress 文件之一。那么,我们为什么不向黑客隐藏它呢?首先,我们可以将 wp-config 移动到 WordPress 根文件夹上方一级(仅一级)。但是,这种技术有点争议,因此我建议采用其他解决方案来保护文件。如果您的网站在 Apache Web Server 上运行,则可以将以下指令添加到 .htaccess 文件中:

<files wp-config.php>
order allow,deny
deny from all
</files>

如果网站运行在 Nginx 上,则可以在配置文件中添加以下指令:

location ~* wp-config.php { deny all; }

注意:只有在设置完成后,才应添加这些说明。

如果您的网站经历了多次迁移,或者您是从其他人那里购买的,建议您创建一组新的 WordPress 安全密钥。这些密钥是一组随机变量,用于改进存储在用户 Cookie 中的信息的加密。从 WordPress 2.7 开始,有 4 个不同的键:AUTH_KEY、SECURE_AUTH_KEY、LOGGED_IN_KEY 和 NONCE_KEY。

默认情况下,它们是为您随机生成的。但 WordPress 实际上有一个免费工具,您可以使用它来生成新的随机键。然后,您只需更新存储在 wp-config.php 文件中的当前密钥即可。

wordpress security keys
WordPress 安全密钥

最后,您应该仔细检查并确保您的权限在 wp-config.php 文件上得到强化。通常,WordPress 网站根目录中的文件将设置为 644,这意味着文件可由文件所有者读取和写入,可由该文件的组所有者中的用户读取,并可由其他所有人读取。根据 WordPress 文档,wp-config.php 文件的权限应设置为 440 或 400,以防止服务器上的其他用户读取它。您可以使用 FTP 客户端轻松更改此设置。

wp-config permissions
wp-config.php权限


评论

发表回复

必填项已用 * 标注