Nginx配置$request_uri与$uri变量的区别
这篇讲的是在Nginx配置中两个极易混淆的变量:$request_uri 与 $uri 的核心区别。文章从一个实际现象出发:浏览器请求同一个地址,这两个变量的值却可能不同。 关键差异在于它们代表的“时间点”。$request_uri 记录的是客户端发起请求时最原始的路径与查询字符串,比如 /my/act?a=1,是“未处理”的状态。而 $uri 则是Nginx处理请求后,最终定位到服务器上资源的路径,比如经过rewrite规则变成 /dir/file.php,它不包含查询参数。 文章特别指出,$request_uri 这个名字本身容易造成误解,因为按标准定义,URI并不包含查询字符串,但它却包含了。理解这个区别至关重要:当你需要记录或匹配客户端最初的原始请求时,应使用 $request_uri;而当你需要基于经过内部重写后的实际资源位置进行逻辑判断或记录日志时,则应使用 $uri。搞混两者可能导致rewrite规则失效或日志记录不准确。