mod_userdir allows you to have user-specific document roots being accessed through http://domain/~user/

The document root can be built by using the home directory of a user which is specified by /~username/ at the beginning of the request path.
Alternatively, mod_userdir can build the docroot from a pattern similar to vhost.pattern but using the username instead of the hostname.

userdir (action)

builds the document root by replacing certain placeholders in path with (parts of) the username.

userdir path;
the path to build the document root with

If path does not start with a slash (/), then the document root is prepended with the home directory of the given user as specified in /etc/passwd.
Otherwise the path specifies the absolute docroot to be used.

Placeholders are:

  • * is replaced by the complete username
  • $1-$9 are replaced by the n-th letter of the username, e.g. $2 is the second letter


Request for http://host/~lighty/foo.html (assuming “/home/lighty” is the home of the “lighty” user):

path docroot physicalpath
“public_html” /home/lighty/public_html/ /home/lighty/public_html/foo.html
“/usr/web/*/” /usr/web/lighty/ /usr/web/lighty/foo.html
“/usr/web” /usr/web/lighty/ /usr/web/lighty/foo.html
“/www/users/$1/$1$2/*/” /www/users/l/li/lighty/ /www/users/l/li/lighty/foo.html

Note: username “root” is not allowed for security reasons.


setup {
	module_load "mod_userdir";

userdir "public_html";