if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
将如下 “ www.test.com/key/其他参数” 重写成 “ key.m.test.com/其他参数” 但最终“其他参数”还是要走"/index.php?s=$1"
if ($request_uri ~* '~^www\.[a-z0-9\-]+?\.[a-z]/(.*)/+') {
//不知道该如何写
}
求助求助求助
1
0ZXYDDu796nVCFxq 2017-09-19 23:49:23 +08:00 via iPhone
你这已经是不同域名了
要么反代,要么 301 302 跳转 没有这种写法 |
2
lework 2017-09-20 09:27:24 +08:00
server {
listen 80; server_name www.test.com; location /key { proxy_pass http://key.m.test.com/key$request_uri; } } |
3
lework 2017-09-20 09:32:42 +08:00
```
server { listen 80; server_name 345; location /key/(/.*) { proxy_pass http://123/$1$is_args$args; } } ``` 应该是这个 |
4
gotea456 2018-11-14 14:05:26 +08:00
这个问题是因为 proxy_pass 的用法不正确,这个指令的参数含有 url 或者不含 url,比如:
proxy_passhttp://127.0.0.1:8888/web-test/; 以及 proxy_passhttp://127.0.0.1:8888; 这两种写法,会导致发到上游的 url 与原始 url 大不一样! 拿问题中的 location ^~ /test/ {}这个配置,当参数含有 url 时(使用 proxy_passhttp://127.0.0.1:8888/web-test/;配置),比如请求是 /test/resource/1.jpg ,实际转发到上游的请求是 /web-test/resource/1.jpg ,它是把 location 匹配以外剩余的 URL 拼接到 proxy_pass 指定 URL 的后面。 而当 proxy_pass 指令的参数只有域名,不 含有 url 时(使用 proxy_passhttp://127.0.0.1:8888;配置),针对同样的请求 /test/resource/1.jpg ,实际转发到上游的请求 url 仍然是 /test/resource/1.jpg 。 因此一定要注意 proxy_pass 后面的参数是否包含 url,它会影响转发到上游请求中 url 是否变化。 |