5.3. Giving Users Their Own URLs
Problem
You want to give each user on your system his own Web space.
Solution
If you want users’ Web locations to be under their home directories, add this to your httpd.conf file:
UserDir public_html
To put all users’ Web directories under a central location:
UserDir "/www/users/*/htdocs"
If you want to let users access their home directory without
having to use a tilde (~
) in the
URL, you can use mod_rewrite to
perform this mapping:
RewriteEngine On RewriteCond "/home/$1/public_html" -d [NC] RewriteRule "^/([^/]+)/(.*)" "/home/$1/public_html/$2"
Finally, if you have mod_perl installed, you can do something more advanced like this (again, added to your httpd.conf file):
<Perl> # Folks you don't want to have this privilege my %forbid = map { $_ => 1 } qw(root postgres bob); opendir H, '/home/'; my @dir = readdir(H); closedir H; foreach my $u (@dir) { next if $u =~ m/^\./; next if $forbid{$u}; if (-e "/home/$u/public_html") { push @Alias, "/$u/", "/home/$u/public_html/"; } } </Perl>
Discussion
The first solution is the simplest and most widely used of the
possible recipes we present here. With this directive in place, all
users on your system are able to create a directory called public_html in their home directories and
put Web content there. Their Web space is accessible via a URL
starting with a tilde (~
), followed
by their usernames. So, a user named bacchus
accesses his personal Web space via the URL:
http://www.example.com/~bacchus/
If you installed Apache ...
Get Apache Cookbook, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.