Apache RewriteRule для каждого пользователя каталог

У меня есть два каталога в каждой из домашних папок моих пользователей: .html-data и .cgi-bin . Первый содержит статические (.html) файлы, второй - файлы для генерации динамических документов.

Каждый пользователь должен иметь возможность публиковать содержимое папки .html-data на http://myhost.com/~ / и содержимое . Папка cgi-bin на http://myhost.com/~ <имя пользователя> / cgi-bin / . Сценарии для создания динамического содержимого должны выполняться от имени пользователя, который их предоставляет (например, ~ steve / cgi-bin / test.cgi должен выполняться от имени пользователя steve).

Для этого я настроил следующую конфигурацию для модуля userdir в 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>

Однако это не работает. 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
1
задан 4 August 2016 в 23:43
1 ответ

Я решил. Сейчас я использую 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}
0
ответ дан 4 December 2019 в 06:01

Теги

Похожие вопросы