A simple way to host multiple URLs in one WordPress account. (Via Sub-Directories)

Getting WordPress (WP) to serve multiple sites, with each site existing in it’s own subdirectory in OTDI’s Web Hosting, requires nested .htaccess files; One in the Document Root (/htdocs/) and one in each site’s top subdirectory.

So, for two subdirectories, you’ll need at least three .htaccess files. Additionally, you’ll need to add a chunk of code to the Document Root’s .htaccess file to fool WP into NOT auto-updating the file when a setting gets changed in the GUI. (Like when updating PermaLinks or Time Zone settings) This function is explained further at https://m0n.co/08

Here’s what to put in the DocumentRoot .htaccess file, replacing the urlX & subdirectoryX tags with your own data:

##############################################################

# redirect urlA to subdirectoryA
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTP_HOST} ^(www.)?urlA.org$
   RewriteCond %{REQUEST_URI} !^/subdirectoryA/
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ /subdirectoryA/$1
   
   RewriteCond %{HTTP_HOST} ^(www.)?urlA.org$
   RewriteRule ^(/)?$ subdirectoryA/index.php [L]
</IfModule>

# redirect urlB to subdirectoryB
<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteCond %{HTTP_HOST} ^(www.)?urlB.com$
   RewriteCond %{REQUEST_URI} !^/subdirectoryB/
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule ^(.*)$ /subdirectoryB/$1

   RewriteCond %{HTTP_HOST} ^(www.)?urlB.com$
   RewriteRule ^(/)?$ subdirectoryB/index.php [L]
</IfModule>

# To PREVENT WP from auto-updating this DocumentRoot's .htaccess file and
# breaking subdirectory site support, add these lines. Do Not Remove!
<IfModule mod_ignore_wordpress.c>

# BEGIN WordPress
<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
</IfModule>

And Here’s what to put in each site’s subdirectory .htaccess file, replacing the subdirectory tags with the name of the subdirectory they’re in:

##############################################
# 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 /subdirectory/
   RewriteRule ^index\.php$ - [L]
   
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteRule . /subdirectory/index.php [L]
</IfModule>

# END WordPress
#################################################