问题描述

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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。