简短回答
example.com/bob/files/picture.jpg is the preferred, canonical URL for images in a WordPress Multisite installation. 具有的两个URL
blogs.dir
在URL中基本相同,并且都利用了文件系统结构。存在带有“bob”的路径,因为您进行了子目录安装,而不是子域安装。其他路径将基于您的其他站点而存在,例如。com/fred/wp内容/博客。目录/5/文件/图片。jpg。否则,不存在其他路径。
答案很长,关于这个过程有很多可以解释的,而且我不能百分之百确定您要寻找的详细程度,因此我将在这里介绍基本内容。
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 Multisiteblog_id
是5deny from all 通过.htaccess
例如,如果你不想,人们就无法访问原始图像大小
您可以为特定文件添加访问控制,但有一个主要缺点,即图像/文件通过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仍然为您做任何需要的事情奠定了基础,比如(如上所述)为敏感文件添加访问控制。降落sunrise.php
将是添加此类代码的好地方。