Apache RewriteRule para cada diretório do usuário

1

Eu tenho dois diretórios em cada pasta inicial dos meus usuários: .html-data e .cgi-bin . O primeiro contém arquivos estáticos (.html), o segundo contém arquivos para geração dinâmica de documentos.

Cada usuário deve poder publicar o conteúdo da pasta .html-data em http://myhost.com/~<username>/ e o conteúdo da pasta .cgi-bin em http://myhost.com/~<username>/cgi-bin/ . Os scripts para criação de conteúdo dinâmico devem ser executados como o usuário que os fornece (por exemplo, ~steve/cgi-bin/test.cgi deve ser executado como usuário steve).

Para isso eu configurei a seguinte configuração para o módulo userdir do Apache 2.4:

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>

No entanto, isso não funciona. O RewriteRule parece errado. Como posso me referir ao diretório .cgi-bin do usuário?

Este é o log de erros:

[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
    
por acid_g 04.08.2016 / 22:35

1 resposta

0

Eu resolvi isso. Eu estou usando o mpm_itk agora. Combinado com regras de reescrita, pode-se definir o usuário executando os scripts:

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}
    
por 19.08.2016 / 11:38