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

时间:2014-02-17 20:58:40

标签: php nginx get

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

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

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

但这不适合我。我怀疑这是因为我使用的查询字符串是几个目录,其中的url类似于:

http://www.mysite.com/thedirectory/thefile?sortby=director

我无法调整try_files指令在该实例中工作,文档似乎稀疏或过时。

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

1 个答案:

答案 0 :(得分:0)

我不知道你从哪里得到答案,但在你的问题的背景下,我没有看到相关性。让我们先澄清一下:

  1. Try_files看起来将URI与磁盘上的物理位置匹配,并允许您控制回退操作。
  2. 默认回退是抛出404。
  3. $ query_string与匹配过程无关。它用于try_files构造,其中必须将某些内容添加到查询字符串中。
  4. 您的问题有三种可能的原因和解决方法:

    1. uri匹配真实文件,但没有文件扩展名,这会导致php处理位置无法触发。在这种情况下,您的陈述应该是:

      try_files $ uri $ uri / $ uri.php;

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

      try_files $ uri $ uri / @appname;

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

      1. 您没有包含相关的fastcgi_param指令。在这种情况下,你的try_files是噪音。首先修复实际问题,方法是提供示例fastcgi_param,如评论中所述。