Add to Favourites Add to Favourites    Print this Article Print this Article

How do I change the DocumentRoot of only one of my subdomains?

As of DirectAdmin 1.59.5, support for a subdomain document root override file has been added:
https://www.directadmin.com/features.php?id=2573
You can use this override file to set a given DocumentRoot for any subdomain (per-https/https control). GUI to follow for Users to set this file through 2222.

Until the User GUI is added, the Admin GUI can be used with the new SDOCROOT tokens (requires 1.59.5+) for any webserver type, without the need for custom templates.
Let's assume you want to change the DocumentRoot for .domain.com:
  1. Admin Level -> Custom Httpd Config -> domain.com
  2. in the |CUSTOM| token, you can specify any path you'd like to the SDOCROOT token.  If you want it relative to the current domain.com/public_html, you'd use:

    |*if SUB="subname"|
    |?SDOCROOT=`DOCROOT`/othersub|
    |*endif|

    which would place it in /home/user/domains/domain.com/public_html/othersub
  3. Or if you wish it to be something fully out of the public_html/private_html, you could set it like:

    |*if SUB="subname"|
    |?SDOCROOT=`HOME`/domains/`DOMAIN`/subdomains/`SUB`|
    |*endif|

    which would place it in /home/user/domains/domain.com/subdomains/sub
The full list of available tokens can be viewed from the "Available Tokens" button in the Custom Httpd Config, when viewing the domain.



OLD METHOD


1) If you wish to change just 1 subdomain path, you'd use this guide as a starting point:

http://help.directadmin.com/item.php?id=3

and insert the following code

|*if SUB="subname"|
|?DOCROOT=/the/new/path/you/want|
|*endif|

This will do a check on the subdomain name.
Change subname to the name of the subdomain you want to set the path for.
Also change the path to the path you'd like.

Failing to use the if statement on the subdomain will cause the main domain and all subdomains to use this new path, which isn't always as desired.

2) Going into more detail, the DocumentRoot for a subdomain will always have the "sub" name appended to the end.  If this is not the desired effect, then the templates would have to be modified to get rid of the bit on the end, while still allowing subdomain paths for normal subdomains to be valid.  To do that, first copy the templates to the custom folder

cd /usr/local/directadmin/data/templates/custom
cp ../virtual_host2*_sub.conf .

Then edit both of the virtual_host2_sub.conf and virtual_host2_secure_sub.conf files.  Find the following line:

|?DOCROOT=`HOME`/domains/`DOMAIN`/public_html|

and change it to be:

|?DOCROOT=`HOME`/domains/`DOMAIN`/public_html/`SUB`|

Same thing for this line:

|?CGI=ScriptAlias /cgi-bin/ `DOCROOT`/`SUB`/cgi-bin/|

change it to be:

|?CGI=ScriptAlias /cgi-bin/ `DOCROOT`/cgi-bin/|

and one last time for a 3rd line, change:

DocumentRoot |DOCROOT|/|SUB|

to be:

DocumentRoot |DOCROOT|



Save the 2 virtual_host2*_sub.conf with these 3 changes, then proceed with step 1 normally, and the path will be what you're looking for.  All existing subdomains will also remain unaffected, since we just moved the SUB part from the bottom, and moved it to the top.




3)Similarly, if you only which to change the path of the domain and not any subdomains, you can use

|*if !SUB|
|?DOCROOT=/the/new/path/you/want|
|*endif|

so that only if there is no subdomain name, then the path will be altered.

Was this answer helpful?

Also Read