我是 Nginx 配置的新手。我正在尝试/api
使用以下配置将请求从子目录重写到正确的路径:
location ~ ^/api/ {
root $backend_folder;
rewrite ^/api(.*) /$1 break;
try_files $uri $uri/ /index.php$is_args$args;
}
一切都按我预期的那样工作:目录中有一个 jpg 文件$backend_folder/media/image.jpg
,并且 URLhttp://example.com/api/media/image.jpg
可用。但是当我添加缓存配置时:
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt|svg)$ { access_log off; expires max; }
我已经开始在这个 URL 上得到 404 错误。
更改后的整体配置如下:
...
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt|svg)$ { access_log off; expires max; }
...
location ~ ^/api/ {
root $backend_folder;
rewrite ^/api(.*) /$1 break;
try_files $uri $uri/ /index.php$is_args$args;
}
我想知道这为什么不起作用?
答案1
Nginx 选择一个位置来处理请求。配置中的两个位置是互斥的。请参阅Nginx 如何处理请求。
您可以考虑嵌套位置,或使用地图来设置过期指令。
例如:
map $request_uri $expires {
default off;
~\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt|svg)($|\?) max;
}
expires $expires;
看这个文件了解详情。