来自deb.sury.org的 Debian libapache2-mod-php在用户目录中无法提供PHP文件
我用的开发机是Debian 13,安装的是由 https://deb.sury.org/ 提供的libmodapache2-php。
在系统升级到2026年 5月 15日后,user_dir里的PHP文件不再被提供服务。
原因是什么?
Apache错误日志如下:
[Fri May 22 14:46:37.007622 2026] [authz_core:error] [pid 22706:tid 22706] [client 10.0.2.2:64798] AH01630: client denied by server configuration: /home/caiofior/public_html/abbrevia/index.php
解决方案
请检查文件 /etc/apache2/mods-enabled/userdir.conf
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
php_admin_value engine On
php_admin_flag short_open_tag On
php_admin_flag display_error On
php_admin_flag display_startup_errors On
php_admin_value error_reporting -1
AllowOverride All
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS PUT DELETE
</Directory>
</IfModule>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
大致应该是这样的,关键的部分是
php_admin_value engine On
然后检查文件cat /etc/apache2/mods-enabled/php*.conf
# Using (?:pattern) instead of (pattern) is a small optimization that
# avoid capturing the matching pattern (as $1) which isn't used here
<FilesMatch "\.ph(?:ar|p|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(?:ar|p|ps|tml)$">
Require all denied
</FilesMatch>
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it. This also disables
# serving the files, as the webserver would otherwise serve them
# as plaintext, and many software packages still put passwords in
# .php files. Comment out or remove the FilesMatch directive if
# you really want to serve php as plaintext from user dirs.
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
php_admin_flag engine Off
<FilesMatch "\.ph(ar|p|ps|tml)$">
Require all denied
</FilesMatch>
</Directory>
</IfModule>
如果是这样,请把最后一条指令中的php_admin_flag engine Off注释掉。
我记得在上次更新之前,这条指令并不存在。
我猜这和这次合并有关。
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。