ユーザーの各ホームフォルダに、.html-data
と.cgi-bin
の2つのディレクトリがあります。 1つ目は静的(.html)ファイルを含み、2つ目は動的ドキュメント生成用のファイルを含みます。
各ユーザーは、.html-data
のhttp://myhost.com/~<username>/
フォルダーのコンテンツと、.cgi-bin
のhttp://myhost.com/~<username>/cgi-bin/
フォルダーのコンテンツを公開できる必要があります。動的コンテンツ作成のスクリプトはスクリプトを提供するユーザーとして実行されるである必要があります(例:~steve/cgi-bin/test.cgi
はユーザースティーブとして実行される必要があります)。
そのために、Apache2.4のuserdirモジュールに対して次の構成を構成しました。
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 "^/~([a-z]+)/cgi-bin(.*)" "/home/$1/.cgi-bin$2" [L,E=ITKUID:$1]
RewriteRule "^/~([a-z]+)/?(.*)" "/home/$1/.html-data/$2" [L,E=ITKUID:http]
AssignUserIDExpr %{reqenv:ITKUID}