phpmyadmin 在 sub-uri 下 404 或资源加载失败的根本原因是 nginx 未正确传递子路径上下文给 php,需用 alias + try_files 组合并显式设置 script_name 为 /phpmyadmin/,同时配置 $cfg['pmaabsoluteuri'] 匹配实际路径。
phpmyadmin 在 sub-uri 下打不开,页面 404 或资源加载失败
根本原因是 nginx 默认不理解 phpmyadmin 的内部路由逻辑,它把 /phpmyadmin/index.php 当作静态路径处理,而实际需要让 php 脚本接管所有子路径(比如 /phpmyadmin/import.php、/phpmyadmin/js/...)。单纯用 alias 会导致重写丢失或 script_name 错乱。
- 必须用
alias+try_files组合,不能只靠root -
alias结尾不能带斜杠(/usr/share/phpmyadmin/❌ →/usr/share/phpmyadmin✅) -
SCRIPT_NAME必须显式设置为 Sub-URI 路径,否则 phpMyAdmin 生成的链接和表单 action 会指向根目录
正确的 Nginx location 块:alias 和 fastcgi_param 缺一不可
以下配置适用于将 phpMyAdmin 挂在 /phpmyadmin 下(注意路径与 alias 值严格对应):
location /phpmyadmin {
alias /usr/share/phpmyadmin;
index index.php;
try_files $uri $uri/ =404;
<pre class="brush:php;toolbar:false;">location ~ \.php$ {
if ($fastcgi_script_name ~ ^/phpmyadmin/(.+\.php)$) {
set $valid_fastcgi_script $1;
}
include fastcgi.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param SCRIPT_NAME /phpmyadmin/$valid_fastcgi_script;
fastcgi_param PATH_INFO $valid_fastcgi_script;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}}
-
alias值必须是文件系统绝对路径,且不以/结尾 -
fastcgi_param SCRIPT_NAME是关键:它告诉 PHP 当前请求的“虚拟路径”,否则 phpMyAdmin 会误判自身位置 - 正则捕获
$valid_fastcgi_script是为了剥离 Sub-URI 前缀,避免SCRIPT_FILENAME拼错 - 别用
root+rewrite,容易导致 CSS/JS 404 或登录后跳转到根路径
常见错误现象与对应原因
这些表现基本能帮你快速定位配置问题:
- 打开
/phpmyadmin显示空白页或 “No input file specified” →SCRIPT_FILENAME拼错了,检查$request_filename是否真实存在 - 登录成功后跳转到
/index.php(而非/phpmyadmin/index.php)→SCRIPT_NAME没设对,或 phpMyAdmin 的$cfg['PmaAbsoluteUri']被硬编码覆盖 - CSS/JS 报 404,但 PHP 页面能打开 → 静态资源 location 块没覆盖到,或 alias 对应的目录权限不对(Nginx 用户需有读取权限)
- 点击“导入”弹出 405 Not Allowed →
location ~ \.php$没匹配到/phpmyadmin/import.php,确认正则是否漏掉斜杠或大小写
phpMyAdmin 自身配置也要配合 Sub-URI
Nginx 配好了,还得告诉 phpMyAdmin 它不在根目录。编辑 /etc/phpmyadmin/config.inc.php(或你的配置文件路径):
$cfg['PmaAbsoluteUri'] = 'https://example.com/phpmyadmin/'; $cfg['SaveDir'] = ''; $cfg['TempDir'] = '/var/lib/phpmyadmin/tmp';
-
$cfg['PmaAbsoluteUri']必须显式设置,否则它会尝试自动推导,大概率失败 - 确保
/var/lib/phpmyadmin/tmp目录存在且 Nginx/PHP 进程可写(否则“导入大文件”直接卡住) - 如果用了
blowfish_secret,确认它已生成且不为空,否则登录页可能无反应
Sub-URI 的麻烦点不在某一行配置,而在 Nginx、PHP、phpMyAdmin 三方对“当前路径”的认知必须完全一致;差一个 / 或少一个 fastcgi_param,就全盘失效。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











