受密碼保護時,Wordpress 子目錄中的 AStats 顯示 404 錯誤
我正在(為客戶)在 CentOS/WHM/Apache 2.2 伺服器上執行 Wordpress 站點,並且在我們安裝了 AWStats 的子目錄中。在我們通過 htaccess 文件應用密碼保護之前,一切正常。如果設置了密碼保護,則在嘗試查看 AStat 時會導致 404 錯誤。
經過大量試驗和錯誤,我們發現這取決於 Wordpress htaccess 規則。
使用以下方法調整它們:
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] # The following line is the line we added RewriteCond %{REQUEST_URI} ^wp-content/stats(.*) RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress
(AWStats 安裝在 wp-content 的子文件夾中,因為這導致 Wordpress 出現的問題最少)
效果很好,直到 Wordpress 自動更新刪除了所有更改並將此 htaccess 塊恢復為預設值。進行此更改並刪除 # Begin/End Wordpress 標記會在下一次 Wordpress 更新發生時導致 500 錯誤,因為它只是添加了這些塊中的另一個。
我嘗試過的一切似乎都不起作用。
我試過的:
- 在 Wordpress 段之前和之後分別添加帶有*write-to-self規則的 htaccess 重寫條件。*這會導致 404 問題。
- 在 AWSStats 目錄中的 htaccess 文件中添加帶有write-to-self規則的 htaccess 重寫條件。這會導致 404 問題。
- 使用指令在 AWSStats 目錄中添加一個 htaccess 文件;重寫引擎關閉。這會導致 404 問題。
- 為 AStats 目錄創建子域。這只會導致 AWStats 中的配置錯誤(我似乎無法修復,因此對於比我更了解 AWStats 配置設置的人來說,我可能能夠使用此解決方案)。
- 刪除密碼保護。不理想,這個網站已經成為 Wordpress 垃圾評論發送者、推薦垃圾郵件發送者以及所有其他 PITA 想要濫用一個可憐的手無寸鐵的 Wordpress 網站的目標。
我想在不授予客戶訪問 cPanel 的情況下解決此問題,因為他們希望幾個人可以訪問 AWStats 中的統計數據(是的,我們確實在網站上安裝了 Analytics,客戶也需要 AWStats *)*誰不應訪問 cPanel 將提供給他們的所有內容。
有沒有人有解決這個特定問題的建議或經驗?
我找到的唯一解決方案是手動編輯 Wordpress 的核心文件之一,以便在更新永久連結時包含此行。
在wp-includes/class-wp-rewrite.php中,從第 1512 行(WP v4.6.1)開始,在類中的
mod_rewrite_rules()
方法中WP_rewrite
:$rules = "<IfModule mod_rewrite.c>\n"; $rules .= "RewriteEngine On\n"; $rules .= "RewriteBase $home_root\n"; // Prevent -f checks on index.php. $rules .= "RewriteRule ^index\.php$ - [L]\n";
正是在這裡,我添加了自己的台詞。
$rules .= "RewriteCond %{REQUEST_URI} ^wp-content/stats(.*)\n";
(在完成 .htaccess 文件中的 Wordpress 命令塊之前,該方法會繼續執行更多行,如果需要自己編輯其中任何一個,只需編輯您需要指令在序列中的位置)
我將在我為這個客戶製作的主題中處理一個自定義函式來接管這個,在 Wordpress 更新期間處理對這個文件的任何更改。這是快速而骯髒的修復。