我有一个用静态 html/js/css 编写的 HTML5 应用程序(它实际上是用 Dart 编写的,但编译成 javascript)。我通过 CDN 提供应用程序文件,REST api 托管在单独的域上。该应用程序使用客户端路由,因此当用户开始使用该应用程序时,该 url 可能会更改为类似http://www.myapp.com/categories
. 问题是,如果用户刷新页面,会导致 404。
是否有任何 CDN 允许我创建一个规则,如果用户请求的页面是有效的客户端路由,它只会返回(在我的情况下)client.html
页面?
更详细的解释/示例
我的 Web 应用程序的静态文件存储在 S3 上,并通过 Amazon 的 CloudFront CDN 提供服务。有一个引导应用程序的 HTML 文件,client.html
. 这是访问域根目录时提供的默认文件,因此如果您访问www.mysite.com
浏览器,实际上是提供www.mysite.com/client.html
.
Web 应用程序使用客户端路由。一旦应用程序加载并且用户开始导航,URL 就会更新。这些 url 实际上并不存在于 CDN 上。例如,如果用户想要浏览小部件,她会单击一个按钮,客户端路由将显示“小部件”视图,并且浏览器的 url 将更新为www.mysite.com/widgets/browse
. 在 CDN 上,/widgets/browse
实际上并不存在,所以如果用户点击浏览器上的刷新按钮,他们会得到 404。
我的问题是是否有任何 CDN 支持查看请求 URI 并重写它。所以,我可以看到一个请求/widgets/browse
并将其重写为/client.html
. 这样,将提供应用程序而不是返回 404。
我意识到这个问题还有其他解决方案,即在 CDN 前面放置一个服务器,但它不太理想。