try_files,别名和regexp位置

时间:2014-10-14 08:37:31

标签: nginx

我有一个子目录(/foo)的正则表达式位置,并希望Nginx为/foo/bar的请求执行此操作:

  1. 检查bar是否是该位置中定义的根目录中的文件或目录。如果是目录,请检查索引文件。
  2. 如果没有文件或目录bar回退到给定的URI(.php文件还有另一个工作处理程序)。
  3. 看起来像这样:

    location ~ ^/foo(/.*)?$ {
      root /my/root/with/files;
      index index.php;
      try_files $1 $1/ /my/root/with/files/index.php?$args;
    }
    

    应该很简单,但我不能让这个工作,文档没有帮助。我尝试了aliasroot等许多组合。

    有任何建议,如何让这个工作?或者您知道在哪里可以获得有关try_files,root,别名,位置(包括有关未解决错误的注释)的有用文档吗?

1 个答案:

答案 0 :(得分:1)

我摆脱了大部分正则表达式和嵌套位置(似乎是错误的,特别是与aliastry_files指令结合使用),现在它的工作原理如下:

location /foo/ {
    alias /my/root/with/files/;
    index index.php;
    try_files $uri $uri/ /foo//foo/index.php?$args;
}

try_files的最后一个参数似乎很奇怪,但alias指令与该位置的组合将替换第一个/foo/

获得的经验:在Nginx中保持尽可能简单(忘记配置中的优雅;))或者它会让你大吃一惊。