Câu trả lời ngắn
example.com/bob/files/picture.jpg là URL chuẩn, được ưu tiên cho hình ảnh trong bản cài đặt WordPress Multisite . Hai URL có blogs.dir
trong URL về cơ bản là giống hệt nhau và cả hai đều tận dụng cấu trúc hệ thống tệp. Đường dẫn với 'bob' tồn tại bởi vì bạn đã cài đặt thư mục con, không phải cài đặt tên miền phụ. Các đường dẫn khác sẽ tồn tại dựa trên các trang web khác của bạn, ví dụ example.com/fred/wp-content/bloss.dir/5/files/pictures.jpg. Mặt khác, không có con đường khác tồn tại.
Câu trả lời dài
Có rất nhiều người có thể giải thích về quy trình này và tôi không chắc chắn 100% về mức độ chi tiết mà bạn đang tìm kiếm, vì vậy tôi sẽ đưa ra những điều cơ bản ở đây.
WordPress Multisite lưu trữ các tệp theo blog_id
("5" sau "/bloss.dir/") để giữ mọi thứ được sắp xếp và tách các tệp của các trang web khác nhau. Cấu trúc thư mục này không có ý định công khai. WordPress sử dụng quy tắc viết lại để định tuyến ^files/(.+)
tới wp-includes/ms-files.php?file=$1
, và sau đó wp-includes/ms-files.php
xử lý và kết quả đầu ra hình ảnh và / hoặc một số tiêu đề hữu ích. Có một vài lợi thế cho việc này:
- Về mặt bảo mật, ít thông tin luôn tốt hơn. "Wp-content / Blogs.dir / 5" là một TMI nhỏ - nó cho biết bạn đang chạy WordPress Multisite và đó
blog_id
là 5.
- Cấu trúc URL giống hệt với cài đặt một trang web. Nếu bạn đã từng chuyển một trang web từ bản cài đặt Multisite sang trang của nó, bạn sẽ không phải cập nhật các tham chiếu đó trong cơ sở dữ liệu hoặc 301 đường dẫn cũ cho các tham chiếu bên ngoài.
- Bạn có thể di chuyển thư mục tệp ra khỏi quyền truy cập công khai hoặc
deny from all
thông qua .htaccess
, ví dụ, mọi người không thể truy cập kích thước hình ảnh gốc nếu bạn không muốn.
- Bạn có thể thêm kiểm soát truy cập vào các tệp cụ thể
Có một nhược điểm chính, đó là hình ảnh / tệp đang truyền qua PHP (và thậm chí có thể yêu cầu một vài truy vấn MySQL), vì vậy nó đòi hỏi nhiều tài nguyên hơn. Nếu bạn đã cài đặt một bộ đệm ẩn, các tài nguyên bổ sung sẽ không đáng kể.
Liên quan đến các bộ lọc, bạn không thể dễ dàng lọc bất cứ thứ gì trong quy trình vì một lý do: không phải mu-plugin , plugin hoặc chủ đề của bạn được tải *. Điều tốt nhất bạn có thể làm là ghi đè các hằng số trong wp-config.php. Dưới đây là các hằng số hữu ích / có liên quan mà bạn có thể ghi đè:
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 );
* Mặc dù plugin không được nạp, thả-in làm. Do đó, mặc dù bạn không thể sử dụng các plugin tiêu chuẩn, WordPress vẫn đặt nền tảng để làm bất cứ điều gì bạn cần, như (như đã đề cập ở trên) thêm kiểm soát truy cập vào các tệp nhạy cảm. Drop-in sunrise.php
sẽ là một nơi tốt để thêm mã như vậy.