Eu uso e preciso php_fpm7.0 no debian 9 (stretch) apache 2.4.25.
DocumentRoot é / var / www / html e funciona bem. Php habilitado, scripts executados etc ... Agora eu também quero servir o mesmo arborescente como um sistema de arquivos via módulo apache dav_fs.
Para fazer isso:
-
/ var / www / webdav é um link simbólico para / var / www / html para que eu possa nomear o mesmo diretório com 2 nomes diferentes no arquivo de configuração do apache, e então criar 2 configurações distintas baseadas no nome de acesso
- acesso o webdav com
/webdav
URL. Dentro da configuração do apache, /webdav
é um alias que aponta para / var / www / webdav . Agora eu só preciso configurar a seção <Directory /var/www/webdav>
e tudo deve ser bom.
Até agora, quase funciona: eu posso pegar e colocar arquivos, criar diretórios, renomear arquivos etc ... com o webdav, mas arquivos PHP continuam a ser executados quando eu os obtenho através do alias do webdav. Então, se eu quiser editar um arquivo .php, eu de fato recebo o resultado do script no meu editor, o que é inútil.
Minha configuração até agora:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html>
AllowOverride All
require all granted
Options Indexes FollowSymLinks MultiViews
</Directory>
Alias /webdav /var/www/webdav
<Directory /var/www/webdav>
SetHandler none
Options -ExecCGI -FollowSymLinks -Includes -Indexes -MultiViews
AddType text/plain php php3 php4 php5 php7 php8 pht phptml phps
AllowOverride None
DAV On
<ifmodule mod_dir.c>
DirectoryIndex disabled
</ifmodule>
<ifmodule mod_rewrite.c>
RewriteEngine Off
</ifmodule>
<Files ~ "^\.ht"> # need to be able to edit .htaccess files.
require all granted
</Files>
</Directory>
</VirtualHost>
Qual é a maneira correta de prevenir a execução do php no diretório / var / www / webdav?
Editar e solução
Como o Debian usa o SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
/etc/apache2/conf-available/php7.0-fpm.conf , eu tenho que usar SetHandler none
. Mas na seção <Directory>
, isso é tarde demais. ele deve ser usado em <Location>
, isso é interpretado cedo o suficiente. Eu também incluí ProxyPass !
como sugere @exussum (deve ser colocado em <Location>
?). É useles neste caso preciso, mas o proxy é certamente indesejado aqui de qualquer maneira.
Observe também que eu tive que colocar a autenticação / autorização em <Directory>
. Funcionou em <Location>
, mas apenas o cliente CLAP cadaver pôde acessar a coleção webdav. Quando a autenticação / autorização está em <Directory>
, o gerenciador de arquivos nautilus pode acessar os arquivos.
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /var/www/html>
AllowOverride All
require all granted
Options Indexes FollowSymLinks MultiViews
</Directory>
Alias /webdav /var/www/webdav
<Location /webdav>
<IfModule mod_proxy.c>
ProxyPass !
</IfModule>
SetHandler none
AddType text/plain php php3 php4 php5 php7 php8 pht phptml phps
</Location>
<Directory /var/www/webdav>
AuthName "Restricted Area"
AuthType Basic
AuthUserFile "/etc/apache2/user-password"
require valid-user
Options -ExecCGI -FollowSymLinks -Includes -Indexes -MultiViews
AllowOverride None
DAV On
<ifmodule mod_dir.c>
DirectoryIndex disabled
</ifmodule>
<ifmodule mod_rewrite.c>
RewriteEngine Off
</ifmodule>
<Files ~ "^\.ht"> # need to be able to edit .htaccess files.
require all granted
</Files>
</Directory>
</VirtualHost>