Cloudfront/S3:根据请求头服务器返回不同的文件

10

我正在使用Middleman在CloudFront和S3上托管静态网站。我想添加多语言支持,而Middleman允许我本地化内容,并在/index.html提供英文版本,在/sp/index.html中提供翻译后的内容。

我希望能够检测请求中的"Accept-Language"头,并根据其服务器提供/index.html或/sp/index.html。

根据我的研究,我看不到使用S3和Cloudfront实现这一点的方法,但也许你们有想法?

如果在CloudFront和S3中没有"适当和良好的方式"来实现此功能,下一个最佳替代方案是什么?目前我正在考虑在JavaScript中检测语言,然后在语言不是英语时重定向用户。

问候,Kim


你可以在存储桶前设置代理服务器并添加重写条件。 - carpamon
1个回答

5
如评论中所述,您需要一种能够读取请求头并重定向或提供动态内容的仲裁者。 S3 是问题所在。
CloudFront 可以将 Accept-Language 标头转发到您的源服务器,并确保每种语言只缓存一次内容。因此,这部分不是问题。
如果 S3 是您的源,则存在问题,因为您的文件是静态的且无法使用语言信息处理传入的请求。我不建议尝试使用 JavaScript 检测语言。这很棘手
虽然 CloudFront 可以配置多个源(每种语言一个),但它不能基于请求头将其转发到这些源。目前,“行为”只能匹配 URL 路径。我怀疑他们可以在某个时候引入标头规则,但在他们这样做之前(或除非您可以找到另一个可以这样做的 CDN),我恐怕我的答案将是“不行”的答案。
由于您的网站都是平面 HTML,我认为您不会对包含各种 CloudFront 行为和动态服务器脚本等复杂解决方案感兴趣。。
我认为远远最好的选择是一个简单的低技术方案 -
提供访问者语言选择,并允许他们从任何页面切换语言。这也避免了惊喜 - 如果我用英语搜索某些内容,但我说西班牙语,我应该看到我搜索的英语页面,然后如果我想要的话切换到西班牙语。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接