2

我们有带有 id 分区和子域的页面缓存。说对于ny.site.com/cat/12345or之类的请求la.site.com/dog/234,nginx 需要

  1. 检查文件是否/cat/ny/1234/5.html存在,返回它
  2. 否则,直接用原来request_uri的打app server,缓存文件就创建好了

我们设法找出了子域和 id 分区部分,但在 try_files 部分没有得到任何运气。总是会出现无限循环错误,例如rewrite or internal redirection cycle while internally redirecting to

我们的 nginx.conf 文件就像

rewrite "/cat/([0-9]{4})([0-9]{1,4})" /system/cache/cat/$subdomain/$1/$2.html break;
rewrite "/cat/([0-9]{1,4})" /system/cache/cat/$subdomain/$1.html break;
try_files $uri $request_uri;

有什么提示吗?谢谢!

更新: 我尝试了以下。Nginx 在文件系统中寻找 $request_uri(例如,/cat/12345)而不是访问应用服务器。有什么想法吗?

try_files $uri @old;
location @old {
    rewrite ^ $request_uri break;
}
4

2 回答 2

5

试试这个

location ^~ ^/cat/([0-9]{4})([0-9]{1,4}) {

    try_files "/cat/ny/$1/$2.html" @app_server;

}
location @app_server{

    # pass this to your app server for processing.

}
  1. 使用 ^~ 因为这也将包括边缘情况,如 /cat/12345/(结束斜杠)。
  2. 并且只需确定您想要 $uri (没有查询字符串)还是 $request_uri (包含查询字符串)。
于 2013-08-09T19:24:15.160 回答
0

我以前从未亲自尝试过,但这就是我要写的方式

location / { # or whatever location you see fit to your requirements
    try_files $uri.html $uri;
    # I don't know if the `.` needs to be escaped `$uri\.html`, you can try both
}
于 2013-08-08T06:59:57.387 回答