nginx:location,try_files,rewrite:在子文件夹中查找模式匹配,否则继续?

我希望Nginx能够做到以下几点:

如果uri匹配模式:

http://mysite.com/$string/ 

和$string不是'KB',而不是'图像',在特定的子文件夹中查找$ string.html。 如果子文件夹中存在$ string.html,则返回它。 如果不存在,请转到下一个匹配位置。

$ string = {任何字母,数字或短划线}

例如,如果用户请求:

 http://mysite.com/test/ 

它应该寻找一个名为:

  /webroot/www/myfolder/test.html 

我已经尝试过的变体:

位置〜/ [a-zA-Z0-9 \  - ] + /
 {
    try_files /myfolder/$uri.html @Nowhere;
 }

但:

  1. 它似乎没有find该文件,即使它确实存在,和
  2. 如果失败(现在总是这样),它想要跳转到@nowhere位置,而不是继续前进,并试图find另一个匹配的位置。

如果文件不存在,我想让它考虑当前位置“不匹配”。

我想你可以试试这个:

 location ~* ^/(KB|images)/$ { #rule for KB or images goes here } location ~* ^/([a-zA-Z0-9\-]+)/$ { root /webroot/www/myfolder/; try_files $1.html @Nowhere; } location @Nowhere { #rule for @Nowhere goes here } 

有关更多信息,请参阅: http : //wiki.nginx.org/HttpCoreModule#location