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

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

我希望 Nginx 执行以下操作:

如果 uri 匹配以下模式:

http://mysite.com/$string/

并且 $string 不是 'KB',也不是 'images',则在特定子文件夹中查找 $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. 即使文件存在,也似乎找不到它,并且
  2. 如果失败了(现在总是失败),它会跳转到@nowhere 位置,而不是继续前进并尝试寻找另一个匹配的位置。

如果文件不存在,我希望它将当前位置视为“不匹配”。

答案1

我认为你可以尝试这个:

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

相关内容