Apache-2.2

受密碼保護時,Wordpress 子目錄中的 AStats 顯示 404 錯誤

  • October 18, 2016

我正在(為客戶)在 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 錯誤,因為它只是添加了這些塊中的另一個。

我嘗試過的一切似乎都不起作用。

我試過的:

  1. 在 Wordpress 段之前和之後分別添加帶有*write-to-self規則的 htaccess 重寫條件。*這會導致 404 問題。
  2. 在 AWSStats 目錄中的 htaccess 文件中添加帶有write-to-self規則的 htaccess 重寫條件。這會導致 404 問題。
  3. 使用指令在 AWSStats 目錄中添加一個 htaccess 文件;重寫引擎關閉。這會導致 404 問題。
  4. 為 AStats 目錄創建子域。這只會導致 AWStats 中的配置錯誤(我似乎無法修復,因此對於比我更了解 AWStats 配置設置的人來說,我可能能夠使用此解決方案)。
  5. 刪除密碼保護。不理想,這個網站已經成為 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 更新期間處理對這個文件的任何更改。這是快速而骯髒的修復。

引用自:https://serverfault.com/questions/805398