在普通的MU安装中,哪些资产URL是可接受的?

时间:2012-12-17 作者:wowest

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
所有这些似乎都是路由到同一个地方。还有其他别名吗?哪一个是规范的?这些都是偶然的吗?是否有相关过滤器?

2 个回复
最合适的回答,由SO网友:Matthew Boynes 整理而成

简短回答

example.com/bob/files/picture.jpg is the preferred, canonical URL for images in a WordPress Multisite installation. 具有的两个URLblogs.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 将是添加此类代码的好地方。

  • SO网友:shea

    在multisite中,使用WordPress 3.5或更高版本安装安装程序,ms-files.php 直接绕过,并且blogs.dir 未使用。

    相反,上载存储在wp-content/blogs/{blog_id} 并被称为。这意味着only one 在子域安装上访问文件的方式,在子目录安装上只有两种。

    结束

    相关推荐

    在插件中对MultiSite使用Add_Option而不是Add_Blog_Option有什么错

    我正在开发一个新插件,但这是我第一次保存它,它将把一个选项保存到数据库中。目前我正在使用add_option 我假设,-激活会失败,或者-将错误的值保存到wp_blogID_options表中因为我没有使用add_blog_option. 所有的posts / 我读过的文献(Wrox、Apress等)说我需要习惯add_blog_option. 但我所有的测试(和检查SQL表)都证明我错了。所以在制作插件(可以是单点安装或多站点安装)时,使用add\\u选项而不是add\\u blog\\u选项有什么错