“原始” MU安装中可以接受哪些资产URL?


9

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

所有这些似乎都路由到同一地方。还有更多别名吗?哪一个是规范的?这些是偶然的吗?有相关的过滤器吗?

Answers:


4

简短答案

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处理并输出图像和/或一些有用的标题。这有一些优点:

  • 在安全性方面,信息越少越好。“ wp-content / blogs.dir / 5”是一个小的TMI,它表示您正在运行WordPress Multisite,并且blog_id是5。
  • URL结构与单站点安装的URL结构相同。如果要将站点从多站点安装转移到自己的站点,则无需更新数据库中的那些引用或301外部引用的旧路径。
  • 您可以将文件目录移出公共访问权限,也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插件将是添加此类代码的好地方。


2

在多站点安装中,使用WordPress 3.5或更高版本的安装程序将ms-files.php被直接跳过,并且blogs.dir不使用。

取而代之的是,将上传内容存储在其中wp-content/blogs/{blog_id}并称为此类内容。这意味着在子域安装中只有一种访问文件的方法,在子目录安装中只有两种方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.