请教个 Nginx 的 rewrite 问题

2019-01-06 12:05:51 +08:00
 care

我 LNMP 环境安装 Nextcloud,因为要设置伪静态,所以根据官方文档做了以下配置:

location = /phpmyadmin {

   root /var/www/html/nextcloud;

   index index.html index.htm index.php;

 }

location / {
    rewrite ^ /index.php$request_uri;
}

我想通过 nginx 访问 phpmyadmin 来管理 mysql,但是我访问 http://localhost/phpmyadmin 时,Nginx 会报 404 错

误(默认 webroot 是 /var/www/html/nextcloud ),想请教下 location 应该怎么配置才能正确访问到 phpmyadmin

tail /var/log/nginx/error.log 查看错误信息,报错如下:

"/usr/share/nginx/html/pma/index.html" is not found (2: No such file or directory)

3988 次点击
所在节点    NGINX
21 条回复
wly19960911
2019-01-06 12:09:28 +08:00
看不懂你的规则想表达什么,location / 下面访问哪个目录了?还有 location /phpMyAdmin 居然是 nextcloud 文件夹。
msg7086
2019-01-06 12:12:06 +08:00
phpmyadmin 指向 nextcloud ?
0ZXYDDu796nVCFxq
2019-01-06 12:13:30 +08:00
location = /phpmyadmin
改为
location /phpmyadmin
care
2019-01-06 12:17:42 +08:00
@wly19960911 我创建了 default.conf,root 指定的 var/www/html/nextcloud,所以 phpmyadmin 放置在上面的 root 目录内( var/www/html/nextcloud/phpmyadmin )我想通过 http://localhost/phpmyadmin 访问管理 mysql
care
2019-01-06 12:19:08 +08:00
@msg7086 我创建了 default.conf,root 指定的 var/www/html/nextcloud,所以 phpmyadmin 放置在上面的 root 目录内( var/www/html/nextcloud/phpmyadmin )我想通过 http://localhost/phpmyadmin 访问管理 mysql,默认通过 http://localhost 现在是可以访问 nextcloud 的,但是访问 phpmyadmin 就不行
wly19960911
2019-01-06 12:30:46 +08:00
我不清楚,这个样子我感觉有可能不仅是这两个规则影响,= 也可以去掉,错误日志和规则表现完全不一样…
msg7086
2019-01-06 12:32:31 +08:00
1. root 或者 alias 可以直接改 root 地址。你可以在 location /phpmyadmin {} 段里面直接 alias 到另一个目录,不需要把 PMA 复制进 NC 里。(而且复制进 NC 是很不好的习惯。)
2. root 和 index 一般是放在 server 段里的,而不是放在 location 段里的。
3. 如上面所说,location 后面的等号要去掉。有等号说明只匹配 /phpmyadmin 而不匹配目录和其中的文件。
care
2019-01-06 12:34:19 +08:00
@gstqc 先谢谢你的回复,我试过了不行。
zen9073
2019-01-06 12:36:55 +08:00
你先把 root 挪到 location 外面来试试
care
2019-01-06 13:29:10 +08:00
@zen9073 配置里 server 段已经定义了 root 目录(/var/www/html/nextcloud ),但是还是无法正常访问,所以我 google 了类似的案例,得到的这段 /phpmyadmin 的代码
care
2019-01-06 14:04:14 +08:00
@msg7086 这样的话,我是不是重新开个 vhost 来访问 phpmyadmin 的意思?因为现在 default 我用 NC 目录作为 webroot 目录了。
msg7086
2019-01-06 16:55:13 +08:00
@care
root /xxx/netcloud
location /pma { alias /yyy/pma; }

顺便,不要把 phpmyadmin 作为目录的名字,除非你想让别人猜到目录名然后爆破你的数据库密码。
care
2019-01-06 20:54:23 +08:00
@msg7086 我用了 alias 还是不行,我上传了完整的配置文档,麻烦您帮忙看下是哪里有问题,谢谢。
bin456789
2019-01-06 21:43:29 +08:00
location /pma {
alias /var/www/html/pma/;
}

注意最后的斜杆
care
2019-01-06 21:49:44 +08:00
@bin456789 也是不行,我就郁闷了。
msg7086
2019-01-07 05:27:23 +08:00
pma 也是被害重地啊,最好起个完全无关的名字,让人联想不到是 pma 的最好。
然后我先问一句,你改了配置以后重启过 nginx 么?
以及你说的不行是怎么个不行? 403 ? 404 ?还是什么。
care
2019-01-07 06:57:21 +08:00
@msg7086 我改完配置都会执行 systemctl reload nginx.service 打开 http://localhost/pma 都是报 404
roadli
2019-01-07 10:06:18 +08:00
需要注意 location 的匹配优先级,匹配.php 的正则优先于普通前缀匹配 /pma 了
linxiaojialin
2019-01-07 10:36:44 +08:00
你可以把 phpmyadmin 做成跟 pma 一样啊,放到。
location /pma {
alias /var/www/html/pma;
}
linxiaojialin
2019-01-07 10:37:46 +08:00
@linxiaojialin 放到 /var/www/html/phpmyadmin

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/524332

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX