Installing a Plugin (MU (MultiSite) Domain Mapping) on a MultiSite WordPress Installation

This post is part of a step-by-step series on installing WordPress on Linux (CentOS 6)

After setting up a network wordpress site you may want to install some plugins. So in the network admin dashboard we click on Plugins and search for some way to install it as we are used to with the regular wordpress site. But lo and behold there is no way to install new plugins. Instead we have to do it on the server side.


  1. WordPress has been fully installed and configured
  2. MultiSite has been setup

Locating the Plugins Directory

Go to the wordpress root directory. When I installed wordpress I put it as follows:

[ahmed@amayem ~]$ cd /var/testblog/

Let’s take a look inside:

[ahmed@amayem testblog]$ ls
index.php             wp-includes
wp-activate.php       wp-links-opml.php
wp-admin              wp-load.php
wp-blog-header.php    wp-login.php
wp-comments-post.php  wp-mail.php
wp-config.php         wp-settings.php
wp-config-sample.php  wp-signup.php
wp-content            wp-trackback.php
wp-cron.php           xmlrpc.php

The plugins directory should be under wp-content/plugins:

[ahmed@amayem testblog]$ cd wp-content/plugins/
[ahmed@amayem plugins]$ ls
akismet  hello.php  index.php

Looks good, it has the default plugins.

Downloading a Plugin

Go to WordPress Plugins and choose your desired plugin. I will go with WordPress MU Domain Mapping. Right click the download button and copy the link. Go back to your server console and use wget to download the plugin:

[ahmed@amayem plugins]$ wget
--2014-09-03 21:04:21--
Connecting to||:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 23667 (23K) [application/zip] Permission denied

Cannot write to `' (Permission denied).

Oops we need sudo. Check here to see how to give a linux user sudo powers.

[ahmed@amayem plugins]$ sudo wget

Now let’s check it’s there:

[ahmed@amayem plugins]$ ls
akismet  hello.php  index.php

It’s there as a .zip file. Let’s unzip it:

[ahmed@amayem plugins]$ sudo unzip 
wordpress-mu-domain-mapping. packaged
   creating: wordpress-mu-domain-mapping/
  inflating: wordpress-mu-domain-mapping/Changelog.txt  
  inflating: wordpress-mu-domain-mapping/domain_mapping.php  
  inflating: wordpress-mu-domain-mapping/readme.txt  
  inflating: wordpress-mu-domain-mapping/wordpress-mu-domain-mapping.pot  
  inflating: wordpress-mu-domain-mapping/sunrise.php  

Looks good, now let’s remove the zip file:

[ahmed@amayem plugins]$ ls
akismet  hello.php  index.php  wordpress-mu-domain-mapping 
[ahmed@amayem plugins]$ sudo rm 
[ahmed@amayem plugins]$ ls
akismet  hello.php  index.php  wordpress-mu-domain-mapping

Checking the Plugin Exists in the Dashboard

When you go back to your admin dashboard, refresh the plugins page and you should see that plugin there. Congratulations!

Network Activate the plugin

Before it starts working you will have to activate the plugin in the plugins page in the super user dashboard. For the MU plugin you might have to do the following steps before you see Domain Mapping under settings.

Further Plugin-Specific Steps

Some plugins may have their own steps afterwards. In my example I used WordPress MU Domain Mapping, which has some more steps. I will continue them here.

Moving sunrise.php into wp-content

[ahmed@amayem plugins]$ cd wordpress-mu-domain-mapping/
[ahmed@amayem wordpress-mu-domain-mapping]$ ls
Changelog.txt  domain_mapping.php  readme.txt  sunrise.php  wordpress-mu-domain-mapping.pot
[ahmed@amayem wordpress-mu-domain-mapping]$ sudo mv sunrise.php ../../sunrise.php
[ahmed@amayem wordpress-mu-domain-mapping]$ cd ../../
[ahmed@amayem wp-content]$ ls
index.php  plugins  sunrise.php  themes  upgrade  uploads

Editing wp-config.php

[ahmed@amayem wp-content]$ sudo vi ../wp-config.php

As per the instructions:

uncomment or add the SUNRISE definition line. If it does not exist please ensure it’s on the line above the last “require_once” command. define( ‘SUNRISE’, ‘on’ );

So to find this we will do a search by entering /SUNRISE and pressing enter. Either you will find the string or get, E486: Pattern not found: SUNRISE. If you haven’t found it then let’s search using /require_once. You should find one match. To move to the next occurrence press n. Once you are at the last match, move the cursor to the line above, and enter insert mode by pressing i. Put in the following line:

define( 'SUNRISE', 'on' );

Exit insert mode using Esc or ctrl+c then save by entering :x.

Setting up the Domain Mapping IP

In the Domain Mapping Settings page, put in the ip address of your server. This is how you can get it:

[ahmed@amayem ~]$ ifconfig | grep inet
[ahmed@amayem ~]$ ifconfig | grep inet
      inet addr:  Mask:
      inet6 addr: ::1/128 Scope:Host
      inet addr:  P-t-P:  Bcast:  Mask:
      inet addr:  P-t-P:  Bcast:  Mask:
      inet addr:  P-t-P:  Bcast:  Mask:

So for me the ip address would be: or Press on Save.

Setting up Your Server (Apache)

I am using Apache to serve my WordPress network. We need to tell Apache to forward all incoming requests that come on the ip we set above to our WordPress root directory. If you are running another site on the same server and there is only one ip then the problem can be solved by putting a virtual host for your other site. If you have more than one ip, then assign one just for your WordPress and the other for your other sites. Luckily I have two ips. So I will assign the 254 ip to the network.

Open the httpd.conf file for editing.

[ahmed@amayem ~]$ sudo vi /etc/httpd/conf/httpd.conf

go to the bottom by entering G. If NameVirtualHost *:80 is commented then uncomment it by removing the # in the beginning.

        DocumentRoot /var/testblog/

Exit insert mode using Esc or Ctrl+c then save by entering :x. Restart Apache:

[ahmed@amayem ~]$ sudo apachectl restart

Now check it’s working by pointing your browser at that ip. Your network site should appear.

Commenting Out COOKIE_DOMAIN in wp-config.php

[ahmed@amayem ~]$ sudo vi /var/testblog/wp-config.php

Search by entering /COOKIE. If you found nothing then you are in luck and don’t have to do anything. If you did then you have comment it by surrounding it with /* */.

Setting the ANAME of your User’s Domain

Go to the DNS record of your users domain, and add a record there that points to your WP Netork’s ip. You can either have the original domain point to the ip or make a subdomain point to the ip. I made a subdomain called test. It looked something like the following:


Here test is a subdomain. To make the domain point to that ip switch test with @.

Making the Domain Mapping

First make a new site by going to Add New under Sites in the Super Admin dashboard. After making it, we need to find the id of that site. Unfortunately blog id of the blogs is not shown in the table when you are viewing All Sites. To find out the blog id just hover over the blog name to see the link. You should see something at the end that looks like this:


Where n is the blog id. We will need that number. Now go to Settings -> Domains. Put in the blog id and the domain mapping (the name of the domain you want to see your new site under), and save it. Now when you go back to Sites -> All Sites you should be able to see the domain mapping.


  1. Apache Doumentation on ip-based v-hosts
  2. WordPress MU Domain Mapping WordPress Plugin Page
  3. Ottopress picture tutorial

Ahmed Amayem has written 90 articles

A Web Application Developer Entrepreneur.

  • Prateek Raj Gautam

    what to do with “wordpress-mu-domain-mapping.pot” present in the plugin folder

    my plugin is installed and showing options but when i add mapping it dont list or map anything.

    • ahmedamayem

      I’m afraid I can’t help you there.