Я использую и нуждаюсь php_fpm7.0 на debian 9 (stretch) apache 2.4.25. DocumentRoot - это / var / www / html и работает хорошо. Php включен, скрипты выполняются и т. Д. Теперь я также хочу использовать ту же древовидность, что и файловую систему, через модуль apache dav_fs.
Сделать это :
/webdav
URL. Внутри конфигурации apache, /webdav
это псевдоним, указывающий на / var / www / webdav. Теперь мне нужно только настроить <Directory /var/www/webdav>
раздел и все должно быть хорошо.Пока что это почти работает: я могу получать и помещать файлы, создавать каталоги, переименовывать файлы и т. Д. С помощью webdav, но файлы PHP продолжают выполняться, когда я ПОЛУЧАЮ их через псевдоним webdav. Поэтому, если я хочу отредактировать файл .php, я действительно получаю результат скрипта в моем редакторе, что бесполезно.
Моя настройка на данный момент:
<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>
Как правильно предотвратить выполнение php в каталоге / var / www / webdav?
Правка и решение
Поскольку Debian использует SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
/etc/apache2/conf-available/php7.0-fpm.conf, Я должен использовать SetHandler none
. Но в <Directory>
раздел, это слишком поздно. это должно быть использовано в <Location>
, это интерпретируется достаточно рано. Я также включил ProxyPass !
как предлагает @exussum (следует поместить в <Location>
?). В данном случае это useles, но в любом случае прокси здесь, безусловно, нежелателен.
Также обратите внимание, что мне пришлось поместить аутентификацию / авторизацию в <Directory>
. Это сработало в <Location>
, но только клиент трупа CLI мог получить доступ к коллекции webdav. Когда аутентификация / авторизация находится в <Directory>
, файловый менеджер nautilus может получить доступ к файлам.
<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>
как вы используете fpm, вам нужно отправить запрос в FPM в какой-то момент
Обычно это так
ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/path/to/socket.sock
или похожие. (видеть https://wiki.apache.org/httpd/PHP-FPM для других вариантов)
Вам нужно, чтобы файлы не попадали в этот блок, используя ваш каталог ProxyPass !
чтобы не дать им пройти мимо