我希望 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; }
但:
- 即使文件存在,也似乎找不到它,并且
- 如果失败了(现在总是失败),它会跳转到@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
}