問題描述
WordPress 似乎允許在 MU 安裝中的許多 URI 處理內容。例如:
example.com/wp-content/blogs.dir/5/files/picture.jpg
example.com/bob/files/picture.jpg
example.com/bob/wp-content/blogs.dir/5/files/pictures.jpg
都顯得路線到同一個地方。有更多的別名嗎?哪一個是規範的?這些是偶然的嗎?有相關的過濾器?
最佳解決方案
簡答
example.com/bob/files/picture.jpg 是 WordPress Multisite 安裝中影像的首選,規範的 URL 。 URL 中具有 blogs.dir 的兩個 URL 基本相同,並且都利用了檔案系統結構。存在’bob’ 的路徑,因為您進行了 sub-directory 安裝,而不是子域安裝。其他路徑將基於您的其他站點,例如 example.com/fred/wp-content/blogs.dir/5/files/pictures.jpg 。否則,不存在其他路徑。
長回答
有很多人可以解釋這個過程,我不是 100%確定你正在尋找的細節水平,所以我將在這裡介紹基礎知識。
WordPress Multisite 透過 blog_id(“/blogs.dir/” 之後的”5”) 儲存檔案,以保持組織和分離不同網站的檔案。此目錄結構不是公開的。 WordPress 使用重寫規則將^files/(.+)路由到 wp-includes/ms-files.php?file=$1,然後 wp-includes/ms-files.php 處理並輸出影像和/或一些有用的標題。這有一些優點:
-
在安全性方面,資訊越少越好。 “wp-content/blogs.dir/5″ 是一個小的 TMI – 它說你正在執行 WordPress 多站點,而
blog_id是 5 。 -
URL 結構與 single-site 安裝的結構相同。如果要將站點從 Multisite 安裝遷移到自己的站點,則不必更新資料庫中的這些引用,也不必更新外部引用的舊路徑。
-
您可以透過
.htaccess將檔案目錄移出公共訪問或deny from all,例如,如果您不想,則無法訪問原始影像大小。 -
您可以將訪問控制新增到特定檔案
有一個主要的缺點,即影像/檔案透過 PHP(甚至需要幾個 MySQL 查詢),因此需要更多的資源。如果您安裝了一個快取外掛,額外的資源應該是可以忽略不計的。
關於過濾器,您不能輕易地過濾任何內容,原因如下:mu-plugins,外掛或主題都不能載入*。最好的方法是在 wp-config.php 中覆蓋常量。以下是可以覆蓋的最有用/相關的常量:
if ( !defined( 'UPLOADBLOGSDIR' ) )
define( 'UPLOADBLOGSDIR', 'wp-content/blogs.dir' );
if ( !defined( 'UPLOADS' ) ) {
// Uploads dir relative to ABSPATH
define( 'UPLOADS', UPLOADBLOGSDIR . "/{$wpdb->blogid}/files/" );
if ( 'wp-content/blogs.dir' == UPLOADBLOGSDIR )
define( 'BLOGUPLOADDIR', WP_CONTENT_DIR . "/blogs.dir/{$wpdb->blogid}/files/" );
}
/**
* Optional support for X-Sendfile header
*/
if ( !defined( 'WPMU_SENDFILE' ) )
define( 'WPMU_SENDFILE', false );
/**
* Optional support for X-Accel-Redirect header
*/
if ( !defined( 'WPMU_ACCEL_REDIRECT' ) )
define( 'WPMU_ACCEL_REDIRECT', false );
*即使外掛沒有載入,drop-ins 也可以。因此,當您不能使用標準外掛時,WordPress 仍然為您所需要的任何事情打下基礎,如上述 (如上所述) 向敏感檔案新增訪問控制。 drop-in sunrise.php 將是新增此類程式碼的好地方。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。