Cloudfront/S3:服务器不同的文件,具体取决于请求标头

use*_*886 9 localization amazon-s3 middleman amazon-cloudfront

我将在CloudFront和S3上托管使用Middleman生成的静态网站.我想添加多语言支持,中间人允许我本地化内容,并在/index.html上有英文版本,在/sp/index.html上有翻译内容.

我希望能够在请求中检测"Accept-Language"标头,并基于该服务器/index.html或/sp/index.html.

根据我的研究,我无法看到使用S3和Cloudfront做到这一点的方法,但也许你们有个主意?

如果没有"适当和好的方式"使用CloudFront和S3这样做,那么下一个最佳替代方案是什么?目前我正在考虑在JavaScript中检测语言,然后在语言不是英语的情况下重定向用户.

问候,金

Tim*_*Tim 5

正如评论中提到的,您将需要某种仲裁器来读取请求标头并重定向或提供动态内容。S3 就是问题所在。

CloudFront 可以将 Accept-Language 标头转发到您的源服务器,并确保仅按语言缓存内容。所以这部分不是问题。

如果 S3 是您的来源,那么您就会遇到问题,因为您的文件是静态的,无法处理带有语言信息的传入请求。我不建议尝试使用 JavaScript 来检测语言。这是有问题的

尽管 CloudFront 可以配置多个源(在您的情况下,每种语言一个),但它无法根据请求标头转发到这些源。目前“行为”只能匹配URL路径。我怀疑他们可能会在某个时候引入标头规则,但在他们这样做之前(或者除非你能找到另一个这样做的 CDN),我担心我的答案将是“你不能”的答案。

由于您的网站都是平面 HTML,我怀疑您对包含各种 CloudFront 行为和动态服务器脚本等的复杂解决方案不感兴趣。

我认为到目前为止你最好的选择是一个简单的、低技术含量的选择——

为访问者提供语言选择,并允许他们从任何页面切换语言。这也避免了意外 - 如果我用英语谷歌搜索一些东西,但我说西班牙语,我应该看到我用谷歌搜索的英语页面,然后如果我愿意的话切换到西班牙语。