Skip to content

Instantly share code, notes, and snippets.

Created July 13, 2009 19:37
  • Star 9 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
User-based Website Directories with Nginx
## REF:
# For requests starting with a tilde, break them into three components:
# 1. The username, everything after the tilde up to the first slash
# 2. The file location, everything after the username up to the last slash
# 3. The trailing slash(es)
# Then, rewrite to go to the f~/ branch.
location /~ {
if ($request_uri ~ ^/~([^/]*)(/.*[^/]|)(/*)$) {
set $homedir $1;
set $filedir $2;
set $trailingslashes $3;
rewrite ^/~([^/]*)(/|$)(.*)$ f~/$3;
# Here, the user-directory components have been parsed. Use an alias to set
# the file directory prefix. But if the file at the requested URI is a
# directory, we jump to the ~/ branch for additional processing.
location f~/ {
alias /home/$homedir/public_html/;
if (-d /home/$homedir/public_html$filedir) {
rewrite ^f~/(.*) ~/$1;
# Here, the request is for a directory in a user's home directory. We check
# that the request URI contained trailing slashes. If it did not, then we
# add the slashes and send a redirect. This circumvents Nginx's faulty
# internal slash-adding mechanism.
location ~/ {
autoindex on;
alias /home/$homedir/public_html/;
if ($trailingslashes = "") {
rewrite .* /~$homedir$filedir/ redirect;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment