将所有请求发送到index.html,除了某些扩展名

时间:2019-08-23 19:46:38

标签: reactjs nginx nginx-location nginx-config

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

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

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

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

我要提供的是静态文件,并将其他请求以 结尾的某些扩展名(.js,.css,.png,.jpg,.gif等)重定向到index.html。 ...)

例如

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之类的地址将返回js文件(如果存在),否则返回404响应,从不index.html

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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