nginx 没有重定向到上游位置

nginx not redirecting to upstream location

我以为我已经了解了 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 文件。

非常感谢, 安德烈斯

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

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;
}

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