Php nginx未重定向到上游位置

Php nginx未重定向到上游位置,php,nginx,redirect,fpm,Php,Nginx,Redirect,Fpm,我想我已经了解了nginx重写规则的基本知识。我错了 你能告诉我我做错了什么吗 server { listen 80; server_name myserver; index index.php index.html index.htm; root /apps/user/websites/; location / { autoindex on; } location ~ myapp { try_files $

我想我已经了解了nginx重写规则的基本知识。我错了

你能告诉我我做错了什么吗

    server {
    listen 80;
    server_name myserver;
    index index.php index.html index.htm;
    root /apps/user/websites/;

    location / {
     autoindex on;
    }
   location ~ myapp {
       try_files $uri $uri /office/myapp/api/public/index.php;
   }
   location ~\.php$ {
      try_files $uri $uri /office/fake/index.html;
#      include fastcgi.conf;
#      fastcgi_pass php-fpm-upstream;
    }
}
如果我访问http://myserver/office index.php是可以访问的,但不是像我所想的那样被最后一个位置(~.php$)捕获,而是作为文本文件处理并发送到浏览器。 我本来希望收到office/fake/index.html文件

多谢各位,
Andres

正则表达式匹配位置的检查顺序与它们在配置文件中出现的顺序相同。拥有

location~myapp{
试试文件$uri$uri/office/myapp/api/public/index.php;
}

location~\.php${
try_文件$uri$uri/office/fake/index.html;
#包括fastcgi.conf;
#fastcgi_pass php fpm上游;
}

将在每个包含
myapp
子字符串的URI上给您一个无休止的循环(除了那些匹配现有文件且未以
.php
结尾的URI),因为
/office/myapp/api/public/index.php
URI与
myapp
正则表达式匹配。您应该交换这些位置以使此配置可行。

http://myserver/office
是什么意思?你有
/apps/user/websites/office
文件夹和索引文件吗?如果您确实拥有该文件夹/文件,您的请求将与该文件一起送达。您没有任何php fpm设置(它在您的配置中被注释掉),因此该文件将以纯文本形式发送到客户端。如果您没有
/apps/user/websites/office
文件夹,则该请求将出现404错误,因为它不属于您的两个位置中的任何一个。感谢您的评论/之所以使用office,是因为在office下,我们已经安装了多个Web应用程序。我正在努力使我的应用程序正常运行。。是的,我知道我在评论purspose上的php fpm。(我原以为当第一个位置尝试index.php时,它会转到第二个位置并呈现index.html)没错,当第一个位置尝试
index.php
时,它会转到第二个位置,当第二个
try\u files
指令尝试相同的文件时,因为这些文件存在,将其发送给客户端。如果你有类似于
的东西,请尝试_files/path/to/non/existence/file/office/myapp/api/public/index.php
在您的第二个位置,您完成了
/office/myapp/api/public/index.php
file.BTW多次尝试同一个文件,就像
try\u files$uri$uri…
是没有意义的,它只是一个额外的系统
stat()
调用(在高负载服务器上需要宝贵的资源)。
try_files$uri$uri/…
指令意味着检查fie是否存在,如果不存在,检查
$uri
是否是一个目录名,以及该目录中是否有一些索引文件指令将花费您一个额外的系统
stat()
调用。但是使用
/dev/null
而不是
/path/to/non/existence/file
(这是一个很好的方法)。