wp-config.php檔案——深入探討如何配置WordPress

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檔案:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
// ** 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. */
// ** 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. */
// ** 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指令以特定的順序出現,我們永遠不應該改變。我們永遠不應該在以下注釋行下新增內容:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
/* That's all, stop editing! Happy blogging. */
/* That's all, stop editing! Happy blogging. */
/* 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和路徑來更改內建檔案結構。首先,我們可以通過定義兩個常量來移動內容資料夾。第一個設定完整目錄路徑:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/site/wp-content' );
define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/site/wp-content' );
define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/site/wp-content' );

第二個設定新目錄URL:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_CONTENT_URL', 'http://example.com/site/wp-content' );
define( 'WP_CONTENT_URL', 'http://example.com/site/wp-content' );
define( 'WP_CONTENT_URL', 'http://example.com/site/wp-content' );

我們可以通過定義以下常量來移動外掛資料夾:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/wp-content/mydir/plugins' );
define( 'WP_PLUGIN_URL', 'http://example.com/wp-content/mydir/plugins' );
define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/wp-content/mydir/plugins' ); define( 'WP_PLUGIN_URL', 'http://example.com/wp-content/mydir/plugins' );
define( 'WP_PLUGIN_DIR', dirname(__FILE__) . '/wp-content/mydir/plugins' );
define( 'WP_PLUGIN_URL', 'http://example.com/wp-content/mydir/plugins' );

同樣,我們可以通過設定新的目錄路徑來移動uploads資料夾:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'UPLOADS', 'wp-content/mydir/uploads' );
define( 'UPLOADS', 'wp-content/mydir/uploads' );
define( 'UPLOADS', 'wp-content/mydir/uploads' );

注意:所有路徑都相對於ABSPATH,並且它們不應包含前導斜槓。

完成後,排列資料夾並重新載入WordPress。

該圖顯示了與自定義結構相比的內建檔案結構

該圖顯示了與自定義結構相比的內建檔案結構

不可能從wp-config檔案中移動/wp-content/themes資料夾,但我們可以在外掛或主題的功能檔案中註冊一個新的主題目錄。

開發人員功能:除錯模式和儲存查詢

如果您是開發人員,您可以強制WordPress顯示錯誤和警告,以幫助您進行主題和外掛除錯。要啟用除錯模式,您只需將WP_DEBUG值設定為true,如下所示:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_DEBUG', true );
define( 'WP_DEBUG', true );
define( 'WP_DEBUG', true );

WP_DEBUG預設設定為false。如果您需要禁用除錯模式,您可以刪除定義,或將常量的值設定為 false。當您在實時站點上工作時,您應該禁用除錯模式。錯誤和警告不應顯示給站點檢視者,因為它可以為黑客提供有價值的資訊。但是,如果您無論如何都必須進行除錯怎麼辦?在這種情況下,您可以強制WordPress在/wp-content資料夾中的debug.log檔案中保留錯誤和警告的記憶體。要啟用此功能,請將以下程式碼複製並貼上到wp-config.php檔案中:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
define( 'WP_DEBUG', true ); define( 'WP_DEBUG_LOG', true ); define( 'WP_DEBUG_DISPLAY', false ); @ini_set( 'display_errors', 0 );
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:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'SCRIPT_DEBUG', true );
define( 'SCRIPT_DEBUG', true );
define( 'SCRIPT_DEBUG', true );

如果您的主題或外掛顯示從資料庫檢索的資料,您可能需要儲存查詢詳細資訊以供後續檢視。SAVEQUERIES常量強制WordPress將查詢資訊儲存到$wpdb->queries陣列中。將列印這些詳細資訊,將以下程式碼新增到頁尾模板:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
if ( current_user_can( 'administrator' ) ) {
global $wpdb;
echo '<pre>';
print_r( $wpdb->queries );
echo '</pre>';
}
if ( current_user_can( 'administrator' ) ) { global $wpdb; echo '<pre>'; print_r( $wpdb->queries ); echo '</pre>'; }
if ( current_user_can( 'administrator' ) ) {
        global $wpdb;
        echo '<pre>';
        print_r( $wpdb->queries );
        echo '</pre>';
}

有關此功能的更深入分析,請參閱如何在WordPress中構建高效查詢

當您的網站長大後,您可能希望減少文章修訂的數量。預設情況下,WordPress每60秒自動儲存一次修訂。我們可以通過在wp-config中設定自定義間隔來更改此值,如下所示:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'AUTOSAVE_INTERVAL', 160 );
define( 'AUTOSAVE_INTERVAL', 160 );
define( 'AUTOSAVE_INTERVAL', 160 );

當然,您也可以減少自動儲存間隔。每次我們儲存我們的編輯時,WordPress都會在文章表中新增一行,以便我們可以恢復文章和頁面的先前修訂。這是一個有用的功能,當我們的網站變大時,它可能會變成一個問題。幸運的是,我們可以減少要儲存的最大發布修訂數量,或者完全禁用該功能。如果您想禁用後期修訂,請定義以下常量:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_POST_REVISIONS', false );
define( 'WP_POST_REVISIONS', false );
define( 'WP_POST_REVISIONS', false );

如果您想限制最大修訂數,請新增以下行:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_POST_REVISIONS', 10 );
define( 'WP_POST_REVISIONS', 10 );
define( 'WP_POST_REVISIONS', 10 );

預設情況下,WordPress 會將刪除的文章、頁面、附件和評論儲存30天,然後永久刪除它們。我們可以使用以下常量更改此值:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'EMPTY_TRASH_DAYS', 10 );
define( 'EMPTY_TRASH_DAYS', 10 );
define( 'EMPTY_TRASH_DAYS', 10 );

我們甚至可以禁用垃圾箱,將其值設定為0,但考慮到WordPress將不再允許您恢復內容。

允許的記憶體大小

有時,您可能會收到如下訊息:

致命錯誤:已用盡xxx位元組的允許記憶體大小……

最大記憶體大小取決於伺服器配置。如果您無權訪問php.ini檔案,您可以通過在wp-config檔案中設定WP_MEMORY_LIMIT常量來增加WordPress的記憶體限制。預設情況下,WordPress嘗試為單個站點分配40Mb給 PHP,為多站點安裝分配64MB 。當然,如果PHP分配的記憶體大於40Mb(或64Mb),WordPress會採用最大值。話雖如此,您可以使用以下行設定自定義值:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_MEMORY_LIMIT', '128M' );
define( 'WP_MEMORY_LIMIT', '128M' );
define( 'WP_MEMORY_LIMIT', '128M' );

如果需要,您還可以使用以下語句設定最大記憶體限制:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '256M' );

建議閱讀:如何提高WordPress中的PHP記憶體限制

自動更新

從3.7版開始,WordPress支援安全版本的自動更新。這是一項重要功能,允許站點管理員始終保持其網站安全。您可以通過定義以下常量來禁用所有自動更新:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'AUTOMATIC_UPDATER_DISABLED', true );
define( 'AUTOMATIC_UPDATER_DISABLED', true );
define( 'AUTOMATIC_UPDATER_DISABLED', true );

也許禁用安全更新不是一個好主意,但這是您的選擇。預設情況下,自動更新不適用於主要版本,但您可以啟用任何定義WP_AUTO_UPDATE_CORE如下的核心更新:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Disables all core updates:
define( 'WP_AUTO_UPDATE_CORE', false );
# Enables all core updates, including minor and major:
define( 'WP_AUTO_UPDATE_CORE', true );
# Disables all core updates: define( 'WP_AUTO_UPDATE_CORE', false ); # Enables all core updates, including minor and major: define( 'WP_AUTO_UPDATE_CORE', true );
# 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

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
define( 'WP_AUTO_UPDATE_CORE', 'minor' );
define( 'WP_AUTO_UPDATE_CORE', 'minor' );

附加常量禁用自動更新(以及對任何檔案的任何更新或更改)。如果設定DISALLOW_FILE_MODS為 true,將禁用所有檔案編輯,甚至主題和外掛安裝和更新。因此,不推薦使用它。

安全設定

我們可以使用wp-config檔案來增加站點的安全性。除了我們在上面看到的檔案結構的更改之外,我們還可以鎖定一些可能會開啟不必要的漏洞的功能。首先,我們可以禁用管理面板中提供的檔案編輯器。以下常量將隱藏外觀編輯器螢幕:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_EDIT', true );
define( 'DISALLOW_FILE_EDIT', true );

注意:考慮到如果將此常量定義為 true,某些外掛將無法正常工作。

disallow_file_edit

disallow_file_edit

一項安全功能是通過SSL管理。如果您購買了SSL證書,並且配置正確,您可以強制WordPress在任何登入和管理會話中通過SSL傳輸資料。使用以下常量:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'FORCE_SSL_ADMIN', true );
define( 'FORCE_SSL_ADMIN', true );
define( 'FORCE_SSL_ADMIN', true );

如果您需要有關SSL管理的更多資訊,請檢視Codex

其他兩個常量允許阻止外部請求並列出允許的主機。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
define( 'WP_HTTP_BLOCK_EXTERNAL', true );
define( 'WP_ACCESSIBLE_HOSTS', 'example.com,*.anotherexample.com' );
define( 'WP_HTTP_BLOCK_EXTERNAL', true ); define( 'WP_ACCESSIBLE_HOSTS', 'example.com,*.anotherexample.com' );
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檔案

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<files wp-config.php>
order allow,deny
deny from all
</files>
<files wp-config.php> order allow,deny deny from all </files>
<files wp-config.php>
order allow,deny
deny from all
</files>

如果網站在Nginx上執行,您可以在配置檔案中新增以下指令:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
location ~* wp-config.php { deny all; }
location ~* wp-config.php { deny all; }
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和站點管理的高階功能。

評論留言