O motivo pelo qual você está tendo este problema é porque as diretivas location
definidas por expressões regulares têm precedência e têm a palavra final, portanto, você provavelmente tem a solicitação do processo do manipulador location ~ \.php$
.
De acordo com o link , o que você deve fazer é simplesmente adicionar o ^~
modifier para o seu código existente, para não verificar expressões regulares, assim:
location ^~ /forums/ {
rewrite ^/forums/(.*)$ https://www.example.com/$1 permanent;
}
Outra consideração é que, embora $uri
(a variável que está por trás das diretivas location
e rewrite
) não contenha $is_args$args
(e, portanto, $1
no exemplo acima também não), eles ainda serão adicionados automaticamente no contexto rewrite
, conforme link , então nada mais precisa ser feito no código acima.
Como um bônus, uma otimização relacionada à manutenção ainda é possível - ou seja, você não precisa especificar https
(ou $scheme
) e o host explicitamente, mas pode deixar o nginx calculá-lo com base no contexto.
Além disso, conforme explicado no link , você pode salvar uma instrução extra fazendo /
be parte da captura.
Assim, com as duas otimizações acima, a melhor abordagem para sua situação pode ser:
location ^~ /forums/ {
rewrite ^/forums(/.*)$ $1 permanent;
}
Veja o código acima no trabalho, que confirma que $scheme://$host
(e :$server_port
, somente se necessário) são adicionados automaticamente, sujeito às configurações descritas em link :
% curl -i "localhost:4441/forums/showthread.php?t=123" |& fgrep Location
Location: http://localhost:4441/showthread.php?t=123
%