wp-config.php文件——深入探讨如何配置WordPress-1

WordPress安装最重要的文件之一是配置文件。它驻留在根目录中,包含常量定义和PHP指令,使WordPress按您想要的方式工作。WP-config.php文件如数据库连接细节,表前缀,路径对特定目录和很多相关的特定设置文件存储数据功能。

基本的wp-config.php文件

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

wp-config.php文件中的数据

当您运行设置时,您将需要输入存储在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将自动生成安全和盐密钥,但您可以随时更改它们,添加任意字符串。为了更好的安全性,请考虑使用在线生成器

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

注意:即使您将使用插件更改表前缀,备份WordPress文件和数据库也是一个好习惯。

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

基本配置:编辑文件系统

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

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。

该图显示了与自定义结构相比的内置文件结构

该图显示了与自定义结构相比的内置文件结构

不可能从wp-config文件中移动/wp-content/themes文件夹,但我们可以在插件或主题的功能文件中注册一个新的主题目录。

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

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

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 );

要使此功能起作用,我们首先需要启用调试模式。然后,设置WP_DEBUG_LOG为true我们会强制WordPress将消息存储到debug.log文件中,而定义WP_DEBUG_DISPLAY为false即不会在屏幕上直接输出这些信息。最后,我们将PHP变量的值设置为0,display_errors这样错误消息就不会打印到屏幕上。wp-config永远不会从缓存中加载。因此,这是覆盖php.ini设置的好地方。

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

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

define( 'SCRIPT_DEBUG', true );

如果您的主题或插件显示从数据库检索的数据,您可能需要存储查询详细信息以供后续查看。SAVEQUERIES常量强制WordPress将查询信息存储到$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都会在文章表中添加一行,以便我们可以恢复文章和页面的先前修订。这是一个有用的功能,当我们的网站变大时,它可能会变成一个问题。幸运的是,我们可以减少要存储的最大发布修订数量,或者完全禁用该功能。如果您想禁用后期修订,请定义以下常量:

define( 'WP_POST_REVISIONS', false );

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

define( 'WP_POST_REVISIONS', 10 );

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

define( 'EMPTY_TRASH_DAYS', 10 );

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

允许的内存大小

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

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

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

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' );

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

安全设定

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

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

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

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

锁定wp-config.php

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

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

WordPress安全密钥

WordPress安全密钥

阅读有关WordPress安全密钥的更多信息 。

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

wp-config.php权限

wp-config.php权限

小结

在这篇文章中,我列出了很多我们可以定义到wp-config文件中的WordPress常量。其中一些常量是常用的,它们的功能很容易理解。其他常量启用需要深入了解WordPress和站点管理的高级功能。