Какие URL-адреса активов приемлемы при установке «vanilla» MU?

9

Wordpress, кажется, позволяет контенту обращаться ко многим URI при установке MU. Например:

 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

Все появляются для маршрута в одно и то же место. Есть еще псевдонимы? Какой из них является каноническим? Любые из них случайны? Существуют ли соответствующие фильтры?

wowest
источник

Ответы:

4

Короткий ответ

example.com/bob/files/picture.jpg - это предпочтительный канонический URL-адрес для изображений в установке WordPress Multisite . Два URL-адреса blogs.dirв URL-адресе по существу идентичны, и оба используют структуру файловой системы. Путь с 'bob' существует, потому что вы установили подкаталог, а не поддомен. Другие пути могут существовать на основе других ваших сайтов, например, example.com/fred/wp-content/blogs.dir/5/files/pictures.jpg. В противном случае никаких других путей не существует.

Длинный ответ

Об этом процессе можно многое рассказать, и я не на 100% уверен в том уровне детализации, который вы ищете, поэтому здесь я рассмотрю основы.

WordPress Multisite хранит файлы blog_id(«5» после «/blogs.dir/»), чтобы упорядочить и разделить файлы разных сайтов. Эта структура каталогов не предназначена для общественности. 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 идентична структуре установки на одном сайте. Если бы вы когда-либо переместили сайт из установки Multisite в свою собственную, вам не пришлось бы обновлять эти ссылки в базе данных или 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}и называются таковыми. Это означает, что существует только один способ доступа к файлам при установке поддомена и только два при установке подкаталога.

карите
источник