Php 如何在nginx中使用_get参数获得正确的try_files$uri指令

Php 如何在nginx中使用_get参数获得正确的try_files$uri指令,php,nginx,get,Php,Nginx,Get,我刚刚将一个站点从apache迁移到nginx,到目前为止我非常高兴。但是,服务器似乎无法识别$\u GET参数 我读到答案是将try_files指令更改为: location / { try_files $uri $uri/ /index.php?$query_string; } 但这对我不起作用。我怀疑这是因为我使用的查询字符串是中的几个目录,url类似于: http://www.mysite.com/thedirectory/thefile?sortby=director 我只

我刚刚将一个站点从apache迁移到nginx,到目前为止我非常高兴。但是,服务器似乎无法识别$\u GET参数

我读到答案是将try_files指令更改为:

location / {
    try_files $uri $uri/ /index.php?$query_string;
}
但这对我不起作用。我怀疑这是因为我使用的查询字符串是中的几个目录,url类似于:

http://www.mysite.com/thedirectory/thefile?sortby=director
我只是无法调整try_files指令以在该实例中工作,而且文档似乎稀疏或过时


有什么想法吗?如果我不能解决这个问题,我将不得不回到Apache

我不知道你是从哪里得到这个答案的,但就你的问题而言,我看不出有什么关联。让我们先澄清一下:

  • Try_文件将URI与磁盘上的物理位置相匹配,并允许您控制回退操作
  • 默认的回退是抛出404
  • $query\u字符串与匹配过程无关。它用于try_文件构造,其中必须将某些内容添加到查询字符串中
  • 您的问题有三种可能的原因和补救措施:

  • uri与实际文件匹配,但没有文件扩展名,这会导致php处理位置不会被触发。在这种情况下,您的声明应为:

    尝试_文件$uri$uri/$uri.php

  • 这是一个虚拟位置,路由器位于index.php中,就像它与许多应用程序一样,比如WordPress和Magento。 在这种情况下,try_文件应为:

    尝试_文件$uri$uri/@appname

  • 如果没有更多上下文,则无法为@appname提供位置块

  • 您没有包括相关的FastCGIu param指令。在这种情况下,您的try_文件是噪声文件。首先修复实际问题,包括所提供的示例fastcgi_param,如注释中所述

  • 答案似乎在我的fastcgi_参数中。我添加了这个,它在服务器崩溃前工作了几分钟。Location config:Location/{try_files$uri$uri//index.php?$query_string;fastcgi_param query_string$query_string;}您的php块中没有包含fastcgi_params?