将所有请求发送到 index.html,某些分机除外

Send all requests to index.html except certain extensions

我正在使用 nginx 来为我的 React 应用程序提供服务,它可以很好地将除静态文件之外的所有内容重定向到 index.html,具体如下:

location / {
  try_files $uri /index.html =404;
}

一段时间以来我对此很满意,但我注意到当某些图像和 javascript 文件在服务器上不可用时,index.html 将被提供。这本身不是问题。

然而,当在应用程序之前添加缓存层时,它会缓存所有这些结果,因为它们确实有 200 作为状态代码。

我想要的是提供静态文件并在其他请求以某些扩展名(.js、.[=37=)结尾时将其他请求重定向到index.html ]、.png、.jpg、.gif 等...)

例如

http://example.com/some/path -> /index.html
http://example.com/existing-file.doc -> /existing-file.doc
http://example.com/some/non-existing-image.png -> 404 error

所以地址像 http://example.com/main.1234.js returns js 文件(如果存在),否则为 404 响应,永远不会 index.html

我是否应该制作一个正则表达式块,例如:

location ~ \.js$|\.css$|\.png$|\.jpg$ {
    what do I write here?
}

我不完全确定如何最好地解决这个问题。

将块留空是完全有效的,它将从周围块继承 rootindex 的值。空位置块的默认操作类似于 try_files $uri $uri/ =404;

您可能还想简化正则表达式,例如:

location ~ \.(js|css|png|jpg)$ { 
}