我在每个用户的主文件夹中有两个目录: .html-data和.cgi-bin 。 第一个包含静态(.html)文件,第二个包含dynamic文档生成的文件。
每个用户应该能够发布http://myhost.com/~<username>/上的.html-data文件夹的内容和http://myhost.com/~<username>/上的.cgi-bin文件夹的内容。 http://myhost.com/~<username>/cgi-bin/ 。 创builddynamic内容的脚本应该像提供它们的用户那样执行 (例如~steve/cgi-bin/test.cgi应该以用户steve的forms执行)。
为此,我为Apache 2.4的userdir模块configuration了以下configuration:
UserDir .html-data UserDir disabled root <Directory "/home/*/.html-data"> RewriteEngine On RewriteBase /~username/ RewriteRule "^/cgi-bin/(.*)" "../../.cgi-bin/$1" AllowOverride FileInfo AuthConfig Limit Indexes Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS </Directory> <Directory "/home/*/.cgi-bin"> Options ExecCGI SetHandler cgi-script Satisfy any </Directory>
但是,这不起作用。 RewriteRule似乎是错误的。 我怎样才能引用用户的.cgi-bin目录?
这是错误日志:
[Thu Aug 04 20:14:17 2016] [trace3] mod_rewrite.c(477): [client 10.0.2.2:44058] 10.0.2.2 - - [myhost.com/sid#19f4a48][rid#1a639b0/initial] [perdir /home/*/.html-data/] add path info postfix: /home/steve/.html-data/cgi-bin -> /home/steve/.html-data/cgi-bin/hello.cgi [Thu Aug 04 20:14:17 2016] [trace3] mod_rewrite.c(477): [client 10.0.2.2:44058] 10.0.2.2 - - [myhost.com/sid#19f4a48][rid#1a639b0/initial] [perdir /home/*/.html-data/] applying pattern '^/cgi-bin/(.*)' to uri '/home/steve/.html-data/cgi-bin/hello.cgi' [Thu Aug 04 20:14:17 2016] [trace1] mod_rewrite.c(477): [client 10.0.2.2:44058] 10.0.2.2 - - [myhost.com/sid#19f4a48][rid#1a639b0/initial] [perdir /home/*/.html-data/] pass through /home/steve/.html-data/cgi-bin
我解决了它。 我正在使用mpm_itk 。 结合重写规则,可以定义执行脚本的用户:
RewriteEngine on RewriteRule "^.*" - [E=ITKUID:http] RewriteRule "^/~root.*" - [L,R=404] RewriteRule "^/~([az]+)/cgi-bin(.*)" "/home/$1/.cgi-bin$2" [L,E=ITKUID:$1] RewriteRule "^/~([az]+)/?(.*)" "/home/$1/.html-data/$2" [L,E=ITKUID:http] AssignUserIDExpr %{reqenv:ITKUID}