Answers:
example.com/bob/files/picture.jpg是WordPress Multisite安装中图像的首选,规范URL。URL中带有的两个URL blogs.dir
本质上是相同的,并且都利用文件系统结构。存在“ bob”的路径是因为您执行了子目录安装,而不是子域安装。其他路径将基于您的其他站点而存在,例如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
处理并输出图像和/或一些有用的标题。这有一些优点:
blog_id
是5。deny from all
可以.htaccess
这样移动,例如,如果您不愿意,人们将无法访问原始图像尺寸。一个主要缺点是,图像/文件通过PHP传递(甚至可能需要几个MySQL查询),因此它需要更多资源。如果安装了缓存插件,则其他资源应该可以忽略不计。
关于过滤器,由于以下原因,您无法轻松过滤过程中的任何内容:mu插件,插件或主题都不会加载*。最好的办法是覆盖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 );
*即使插件不能装,降插件做。因此,尽管您不能使用标准插件,但WordPress仍然为您做所需的事情奠定了基础,例如(如上所述)为敏感文件添加访问控制。该sunrise.php
插件将是添加此类代码的好地方。