nginx 重写规则疑问

2019-04-04 17:05:03 +08:00
 ropon

需求:访问 xxx.com/* 重写到 xxx.com/testdir/*

测试

if ($request_uri !~* "/testdir/?") {
	rewrite ^(.*) /testdir$1 last;
}
  1. xxx.com 访问提示"File not Found"
  2. xxx.com/x.php 重写到 xxx.com/testdir/x.php 访问正常,测试 xxx.com/index.php 也正常

开启重写日志进一步分析,但没看懂。

"/testdir/?" does not match "/", client: 1.1.1.1, server: xxx.com, request: "GET / HTTP/2.0", host: "xxx.com"
"^(.*)" matches "/", client: 1.1.1.1, server: xxx.com, request: "GET / HTTP/2.0", host: "xxx.com"
rewritten data: "/testdir/", args: "", client: 1.1.1.1, server: xxx.com, request: "GET / HTTP/2.0", host: "xxx.com"
"/testdir/?" does not match "/", client: 1.1.1.1, server: xxx.com, request: "GET / HTTP/2.0", host: "xxx.com"
"^(.*)" matches "/testdir/index.php", client: 1.1.1.1, server: xxx.com, request: "GET / HTTP/2.0", host: "xxx.com"
rewritten data: "/testdir/testdir/index.php", args: "", client: 1.1.1.1, server: xxx.com, request: "GET / HTTP/2.0", host: "xxx.com"

换成以下规则测试 OK

if ($document_uri !~* "/testdir/?") {
	rewrite ^(.*) /testdir$1 last;
}
1121 次点击
所在节点    问与答
4 条回复
kiddult
2019-04-04 18:54:20 +08:00
/testdir/ 路径没有对应?

这两个对于 xxx.com 这个请求应该是一致的,都会重写到 xxx.com/testdir/
ropon
2019-04-04 20:01:05 +08:00
@kiddult 没看明白呢 您指的是 xxx.com xxx.com/testdir/ 是一样?
kiddult
2019-04-04 20:30:06 +08:00
@ropon 就是对于 xxx. com 这个请求,`$document_uri` 和 `$request_uri` 产生的效果应该是一致的
msg7086
2019-04-05 20:55:40 +08:00
新开一个 location 可能会更简单明了一些。

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

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

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

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

© 2021 V2EX