Eu tenho uma configuração fastcgi php em nginx. Agora, tenho poucas solicitações para lidar com, por exemplo, /X.php
by /X
, /Y.php
by /Y
Parece simples, então escrevi o seguinte para teste:
rewrite ^/X.php$ /api/v1/stat last;
foi capturado pelo manipulador 404 do aplicativo php. aqui está o log de erros do nginx com rewrite_log em
[notice] 15289#0: *759 "^/X.php$" matches "/X.php", client: 10.0.0.12, server: example.com, request: "GET /X.php HTTP/1.1", host: "example.com"
[notice] 15289#0: *759 rewritten data: "/api/v1/stat", args: "", client: 10.0.0.12, server: example.com, request: "GET /X.php HTTP/1.1", host: "example.com"
[notice] 15289#0: *759 "^/X.php$" does not match "/index.php", client: 10.0.0.12, server: example.com, request: "GET /X.php HTTP/1.1", host: "example.com"
Se eu visitar / api / v1 / stat diretamente, isso funciona:
[notice] 15125#0: *708 "^/X.php$" does not match "/api/v1/stat", client: 223.104.3.248, server: example.com, request: "GET /api/v1/stat HTTP/1.1", host: "example.com"
[notice] 15125#0: *708 "^/X.php$" does not match "/index.php", client: 223.104.3.248, server: example.com, request: "GET /api/v1/stat HTTP/1.1", host: "example.com"
Aqui está minha configuração nginx relacionada:
rewrite ^/X.php$ /api/v1/stat last;
location / {
try_files $uri $uri/ /index.php;
}
location ~ .*\.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_pass php;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
upstream php {
server unix:/var/run/php-fpm.sock;
}
Por favor me ajude a encontrar uma solução. obrigado.
OBSERVAÇÃO
Um pequeno histórico que pode ajudar você a entender meu problema.
É óbvio que o seguinte deve funcionar e funciona:
rewrite ^/X.php$ /api/v1/stat permanent;
No entanto, estou lidando com algum tipo de hardware que não entende o redirecionamento 301, então estou tentando fazer com o redirecionamento interno sem revelar o redirecionamento.
UPDATE 1
A solução que eu criei é apenas metade. Eu tenho /X.php
redirecionado para /api/v1/stat
fine. No entanto, nenhum parâmetro pode ser passado após o redirecionamento. Acho que rewrite
transmitirá o $args
, mas não funciona. Eu estou perdido agora ..
UPDATE 2
Problema resolvido. embora eu ainda não tenha certeza porque $args
não está passando adiante.