我想保護我的伺服器中的所有 Wordpress 管理介面 (wp-login.php/wp-admin)。為此,我想在 Apache 中建立一個全域配置,在到達真正的 WordPress 登入頁面之前要求提供固定的使用者/密碼(HTTP 基本驗證)。這將避免密碼掃描機器人導致 PHP 過載。
<FilesMatch "wp-login.php">
AuthUserFile /etc/wordpress.passwd
AuthName "TYPE USER wp AND PASSWORD wp"
AuthType Basic
require valid-user
</FilesMatch>
有效,任何名為 wp-login.php 的檔案都會要求輸入密碼。
但是當我運行 WordPress 網站時,.htaccess對全域配置有某種「優先權」。當我訪問 wp-login.php 時,我剛剛收到 404 錯誤。如果我刪除/重命名 .htaccess,FilesMatch 可以工作,但我丟失了「路徑遮罩」功能,這是必要的。
WordPress .htaccess 是:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
我正在尋找一種使 FilesMatch 指令優先於 .htaccess (重寫模組)的方法:詢問密碼,而不是重寫 URL(給出 404)。
有任何想法嗎?
答案1
解決了
Wordpress .htaccess 重寫了所有內容,包括 HTTP 基本驗證、401 和 403 回傳程式碼使用的 ErrorDocument 指令。我有 ErrorDocument 的個人化 SHTML 檔案(cPanel 伺服器中的預設設定)。因此,它不會要求輸入密碼,而是重寫 HTTP 標頭,要求輸入密碼和同時顯示 404 錯誤頁面,讓網頁瀏覽器瘋狂。
為了解決這個問題,我只是強制使用預設的 ErrorDocument 訊息:
ErrorDocument 401 default
ErrorDocument 403 default