在具有多个用户的系统上,可以使用UserDir
指令允许每个用户在其主目录中拥有一个网站。URL的访问者http://example.com/~username/
将从指令“ username
”指定的子目录中获得用户“ ” 的主目录中的内容UserDir
。
请注意,默认情况下,不
启用对这些目录的访问。您可以在使用时UserDir
通过取消注释以下行来启用访问:
#Include conf/extra/httpd-userdir.conf
在默认配置文件中conf/httpd.conf
,并httpd-userdir.conf
根据需要调整文件,或<Directory>
在主配置文件中的块中包含适当的指令
。
该UserDir
伪指令指定一个目录,每个用户的内容将从该目录中加载。该指令可以采用几种不同的形式。
如果给出的路径不是以斜杠开头,则假定该路径是相对于指定用户主目录的目录路径。给定此配置:
UserDir public_html
URL http://example.com/~rbowen/file.html
将被转换为文件路径
/home/rbowen/public_html/file.html
如果给出以斜杠开头的路径,则将使用该路径加上指定的用户名来构建目录路径。给定此配置:
UserDir /var/html
URL http://example.com/~rbowen/file.html
将被转换为文件路径/var/html/rbowen/file.html
如果提供的路径包含星号(*),则将使用星号替换为用户名的路径。给定此配置:
UserDir /var/www/*/docs
URL http://example.com/~rbowen/file.html
将被转换为文件路径
/var/www/rbowen/docs/file.html
也可以设置多个目录或目录路径。
UserDir public_html /var/html
对于URL http://example.com/~rbowen/file.html
,Apache将搜索~rbowen
。如果没有找到它,Apache会寻找rbowen
在/var/html
。如果找到,则上述URL将被转换为文件路径
/var/html/rbowen/file.html
该UserDir
指令可用于将用户目录请求重定向到外部URL。
UserDir http://example.org/users/*/
上面的示例会将的请求重定向
http://example.com/~bob/abc.html
到
http://example.org/users/bob/abc.html
。
使用UserDir文档中显示的语法,您可以限制允许哪些用户使用此功能:
UserDir disabled root jro fish
上面的配置将为所有用户启用该功能,但disabled
语句中列出的用户除外。同样,您可以使用以下配置为除少数用户外的所有用户禁用该功能:
UserDir disabled UserDir enabled rbowen krietz
有关UserDir
其他示例,请参见文档。
为了给每个用户自己的cgi-bin目录,您可以使用<Directory>
指令来使用户主目录的特定子目录启用cgi。
<Directory "/home/*/public_html/cgi-bin/"> Options ExecCGI SetHandler cgi-script </Directory>
然后,假设将UserDir
其设置为
public_html
,则example.cgi
可以从该目录加载cgi程序,如下所示:
http://example.com/~rbowen/cgi-bin/example.cgi
如果要允许用户在其Web空间中修改服务器配置,则将需要使用.htaccess
文件进行这些更改。确保AllowOverride
为您要允许用户修改的指令设置了足够的值。有关此工作原理的更多详细信息,请参见.htaccess教程。