默认重写规则:
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=$1 last;
break;
}
需求:
将如下 “ www.test.com/key/其他参数”
重写成 “ key.m.test.com/其他参数”
但最终“其他参数”还是要走"/index.php?s=$1"
已经写的(判断 www ):
if ($request_uri ~* '~^ww美国服务器w\.[a-z0-9\-]+?\.[a-z]/(.*)/+') {
//不知道该如何写
}
求助求助求助
你这已经是不同域名了
要么反代,要么 301 302 跳转
没有这种写法
server {
listen 80;
server_name www.test.com;
location /key {
proxy_pass http://key.m.test.com/key$request_uri;
}
}
```
server {
listen 80;
server_name 345;
location /key/(/.*) {
proxy_pass http://123/$1$is_args$args;
}
}
```
应该是这个
这个问题是因为 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 是否变化。