Я хотел бы, чтобы Apache обслуживал «обычные» файлы из /srv/http/public
, а пользовательские файлы из /srv/http/[user]
, поэтому каталоги могут выглядеть так:
/srv/http
/public
index.html - Accessible at localhost/index.html
/austin
index.html - Accessible at localhost/~austin/index.html
На данный момент у меня есть следующие соответствующие конфигурации в .conf
файлах Apache:
User http
Group http
DocumentRoot "/srv/http/public"
<Directory "/srv/http/public">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
UserDir /srv/http
UserDir disabled root
<Directory "/srv/http">
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
<Limit GET POST OPTIONS>
Order allow,deny
Allow from all
</Limit>
<LimitExcept GET POST OPTIONS>
Order deny,allow
Deny from all
</LimitExcept>
</Directory>
И следующие разрешения в /srv/http
:
drwxr-xr-x root http /srv/http
drwxr-xr-x http http /srv/http/public
-rwxr-xr-x http http /srv/http/public/index.html
drwxr-xr-x austin http /srv/http/austin
-rwxr-xr-x austin http /srv/http/austin/index.html
При использовании этой настройки localhost/index.html
отображается нормально, но localhost/~austin/index.html
дает403 Доступ запрещён!ошибка, что бы я ни пытался.
Редактировать:соответствующая запись error_log: [error] [client ::1] client denied by server configuration: /srv/http/austin/index.html
Что я делаю не так?
О, и я не думаю, что это имеет значение, но я использую Arch Linux и Apache 2.2.19.
решение1
Проблема заключалась в том, что <Directory>
директива для пользовательских каталогов была слишком ограничительной.
Повторное использование тех же директив из /srv/http/public
каталога позволяет внешнему миру видеть любые пользовательские файлы:
<Directory "/srv/http">
Options FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>