phpMyAdmin 404或下载PHP文件是因Apache未启用mod_php或未配置Alias;需运行a2enmod php8.1、确认phpmyadmin.conf存在并重启Apache;“mysqli扩展缺失”需安装php-mysql并重启;Alias不生效需检查路径、权限及Include配置;HTTPS跳转HTTP问题需设置PmaAbsoluteUri和ForceSSL。
phpMyAdmin 访问 404 或直接下载 php 文件
这是 apache 没正确启用 mod_php 或没把 phpmyadmin 的 alias 加进配置里。ubuntu 默认用 libapache2-mod-php,但装完不自动生效,得手动启用模块并重启服务。
- 运行
a2enmod php8.1(版本号按你实际安装的填,比如php8.2) - 确认
/etc/apache2/conf-enabled/phpmyadmin.conf存在且内容不是空的——这个文件通常由phpmyadmin包安装时自动生成,但偶尔会漏掉 - 如果不存在,手动创建它,写入:
<Directory /usr/share/phpmyadmin> Options FollowSymLinks DirectoryIndex index.php <IfModule mod_php.c> AddType application/x-httpd-php .php php_flag magic_quotes_gpc Off php_flag track_vars On php_flag register_globals Off php_admin_flag allow_url_fopen Off php_admin_flag allow_url_include Off php_admin_value upload_max_filesize 64M php_admin_value post_max_size 64M </IfModule> </Directory> - 别忘了
systemctl restart apache2
登录页报错 “The mysqli extension is missing”
Apache 能跑,但 phpMyAdmin 进不去,说明 PHP 环境缺 MySQLi 扩展。Ubuntu 上这扩展默认随 php-mysql 包提供,但可能没装或没启用。
- 先查 PHP 是否加载了 mysqli:
php -m | grep mysqli,没输出就说明没启用 - 装包:
apt install php-mysql(注意不是php-mysqlnd,后者在某些旧版 phpMyAdmin 下兼容性略差) - 再检查
/etc/php/*/apache2/conf.d/20-mysqli.ini是否存在;如果存在但被注释了,去掉开头的分号 - 改完必须重启
apache2,仅 reload 不够
Apache 配置中 Alias /phpmyadmin 不生效
常见于手动编辑 /etc/apache2/apache2.conf 或站点配置时路径写错、拼写错误,或者没包含 conf-enabled 目录下的配置。
- Alias 行必须放在
<VirtualHost>块内,或确保它所在文件被Include到主配置中(比如/etc/apache2/apache2.conf末尾有IncludeOptional conf-enabled/*.conf) - Alias 路径要和实际安装路径一致:
Alias /phpmyadmin /usr/share/phpmyadmin,不能少斜杠也不能多斜杠 - 对应目录权限要放开:
<Directory /usr/share/phpmyadmin> Require all granted </Directory>,否则 Apache 2.4+ 会拒接访问 - 别在
.htaccess里折腾这个,phpMyAdmin 默认禁用 .htaccess 支持
HTTPS 下登录后跳转回 HTTP、提示“不安全连接”
phpMyAdmin 默认从 $_SERVER['HTTP_HOST'] 和 $_SERVER['REQUEST_SCHEME'] 推断当前协议,但反向代理或负载均衡器后面常导致识别失败,结果生成 http 链接。
- 在
/etc/phpmyadmin/config.inc.php顶部加一行:$cfg['PmaAbsoluteUri'] = 'https://your-domain.com/phpmyadmin/'; - 如果用了 Nginx 做前端代理,确保它转发了
X-Forwarded-Proto: https头,并在 phpMyAdmin 配置里加上:$cfg['ServerDefault'] = 1; $cfg['Servers'][$i]['host'] = 'localhost'; $cfg['Servers'][$i]['port'] = ''; $cfg['Servers'][$i]['ssl'] = true; $cfg['ForceSSL'] = true;
- 改完清浏览器缓存,
ForceSSL开启后所有请求都会 301 跳转到 HTTPS,别忘了证书已部署好
mod_php 和 mysqli 这两个扩展最容易掉链子。











