TL; DR
Existe um caminho, mas não sem uma pequena programação envolvida.
- Remover parte da string de consulta de
$request_uri
- URI-unescape o resultado
- Adicione o
$query_string
, se houver - Adicione o
$query_string
ao$uri
- Compare o
$uri
aprimorado com o$request_uri
modificado, se eles não forem iguais um ao outro, você acabou de descobrir uma sub-solicitação.
Resposta longa
Atualmente, parece não haver uma maneira de distinguir entre solicitações e sub-solicitações interativas pelo usuário com uma simples variável , como no Apache. Algo como $is_subreq
simplesmente não está disponível . (nginx dev team, alguém?)
No momento, estou programando um plugin htaccess para nginx, onde eu precisava encontrar uma maneira de garantir que a solicitação atual é a original. Isso pode ser obtido por meio de comparação de $uri
com $request_uri
e, se forem diferentes, a solicitação será uma continuação.
Mas tenha cuidado , se você comparar com ousadia as variáveis, você falhará:
$uri
não possui seu $query_string
e é decodificado por URL, enquanto $request_uri
é deixado intocado (ainda codificado), com sua string de consulta anexada.
Aqui está um código recortado do meu projeto atual (implementação htaccess em Lua), onde você pode ver como eu fiz:
local org_request_uri = ngx.var.request_uri
-- The original requested URI including query string.
-- Make sure uri doesn't end on '?', as request_uri will never match that.
org_request_uri_path = org_request_uri:match('^[^%?]+')
if org_request_uri:len() > org_request_uri_path:len() then
org_request_uri = ngx.unescape_uri(org_request_uri_path)..
org_request_uri:sub(org_request_uri_path:len()+1)
else
org_request_uri = ngx.unescape_uri(org_request_uri_path)
end
local request_uri = ngx.var.uri -- The actual requested URI including query string
if ngx.var.query_string then
request_uri = request_uri..'?'..ngx.var.query_string
end