Plesk

How to set up WordPress Multisite in Plesk using sub-directories?

Question

How to set up WordPress Multisite in Plesk using sub-directories?

Answer

  1. Log into Plesk

  2. Go to Domain > example.com > Install WordPress;

    Note: This step can be skipped if WordPress is already present on the domain.

  3. Make sure Multisite feature was enabled after WordPress installation in Domains > example.com > File Manager > wp-config.php:

    Before:

    /* That's all, stop editing! Happy publishing. */

    After:

    define('WP_ALLOW_MULTISITE', true);

    /* That's all, stop editing! Happy publishing. */

    This line enables multisite network feature.

  4. Log into WordPress through Domains > example.com > Log in;

  5. In WordPress Administrator Dashboard open Tools > Network setup;

  6. Set Addresses of Sites in your Network to Sub-directories and click Install;

  7. Copy the suggested configuration and add it in Domains > example.com > File Manager for wp-config.php and .htaccess files.

    This is an example for wp-config.php:

    Before:

    /* That's all, stop editing! Happy publishing. */

    After:

    define('MULTISITE', true);
    define('SUBDOMAIN_INSTALL', false);
    define('DOMAIN_CURRENT_SITE', 'example.org');
    define('PATH_CURRENT_SITE', '/');
    define('SITE_ID_CURRENT_SITE', 1);
    define('BLOG_ID_CURRENT_SITE', 1);
    /* That's all, stop editing! Happy publishing. */

    This is an example for .htaccess file:

    Before:

    # BEGIN WordPress
    # The directives (lines) between "BEGIN WordPress" and "END WordPress" are
    # dynamically generated, and should only be modified via WordPress filters.
    # Any changes to the directives between these markers will be overwritten.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]
    </IfModule>
    # END WordPress

    After:

    # BEGIN WordPress
    # The directives (lines) between "BEGIN WordPress" and "END WordPress" are
    # dynamically generated, and should only be modified via WordPress filters.
    # Any changes to the directives between these markers will be overwritten.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index.php$ - [L]
    # add a trailing slash to /wp-admin
    RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]
    RewriteCond %{REQUEST_FILENAME} -f [OR]
    RewriteCond %{REQUEST_FILENAME} -d
    RewriteRule ^ - [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L]
    RewriteRule ^([_0-9a-zA-Z-]+/)?(.*.php)$ $2 [L]
    RewriteRule . index.php [L]
    </IfModule>
    # END WordPress

  8. Set up additional directives to enable Multisite redirects:

    Note: nginx serves dynamic content when Proxy mode is present and set to disabled state in Domains > example.com > Apache & nginx Settings:

    In case dynamic content is served by nginx

    1. Log into Plesk;
    2. Go to Domains > example.com > Apache & nginx Settings;

    3. Add the following to the Additional nginx directives:

      rewrite ^/([_0-9a-zA-Z-]+)/wp-admin$ /$1/wp-admin/index.php;
      rewrite ^/([_0-9a-zA-Z-]+)/wp-admin/$ /$1/wp-admin/index.php;
      rewrite ^/([_0-9a-zA-Z-]+)/((wp-(?:content|includes|admin)).*)$ /$2 break;
      if ($request_uri !~ "^/(wp-(?:content|includes|admin)).*") {
      rewrite ^/([_0-9a-zA-Z-]+)/(.*.php)$ /$2 break;
      }
      set $test "";
      if (!-e $request_filename) {
      set $test P;
      }
      if ($uri !~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|external-nginx-static-location)) {
      set $test "${test}C";
      }
      if ($test = PC) {
      rewrite ^/.*$ /index.php;
      }

    In case dynamic content is served by Apache Web Server

    1. Log into Plesk;
    2. Go to Domains > example.com > Apache & nginx Settings;
    3. Disable Static…