nginx中如何将request_uri中的$uri修改为uri的一部分?

nginx中如何将request_uri中的$uri修改为uri的一部分?

假设 $request_uri 的值为 /a/b/c 。 $uri 的当前值为 /index.php 。是否可以将我的 $uri 更改为 /b/c 。

我试过这个,但似乎不起作用,

if ($request_uri ~* /a/(.*)/(.*)){
  set $uri /$1/$2;
}

但这会导致“uri”变量重复的错误。我也试过了,

if ($request_uri ~* /a/(.*)/(.*)){
  rewrite ^ /$1/$2 break;
}

但是 $variables 似乎没有存储值。

有办法吗?谢谢。

答案1

你能只使用临时变量吗?例如(未尝试):

if ($request_uri ~* /a/(.*)/(.*)){
  set $tmp /$1/$2;
  rewrite ^ $tmp break;
}

或者怎么样:

if ($request_uri ~* /a/(.*)/(.*)){
  rewrite ^ $request_uri;
  rewrite ^/[^/]*/(.*)/(.*) /$1/$2 break;
}

答案2

正如@MTeck 所回答的那样https://stackoverflow.com/questions/9084969/nginx-request-uri-without-args

如果您确实想要去除参数后的 $request_uri,那么您可以这样做。

local uri = string.gsub(ngx.var.request_uri, "?.*", "")

您将需要有 lua 可用,但它将完全按照您的要求执行。

相关内容