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

我希望能够检测到请求中的“Accept-Language” header ,并基于该服务器/index.html或/sp/index.html。

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

如果没有使用CloudFront和S3的“适当且好的方法”,那么下一个最佳选择是什么?目前,我正在考虑检测JavaScript中的语言,然后如果该语言不是英语,则将用户重定向。

问候,金

最佳答案

如评论中所述,您将需要某种仲裁程序,可以读取请求 header 并重定向或提供动态内容。 S3是那里的问题。

CloudFront可以forward the Accept-Language header to your origin server,并确保仅按语言缓存内容。所以那部分不是问题。

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

尽管可以将CloudFront配置为具有多种来源(在您的情况下为每种语言一种),但是它无法基于请求 header 转发到这些来源。当前,“行为”只能匹配URL路径。我怀疑他们可能会在某个时候引入 header 规则,但是直到他们这样做(或者除非您找到另一个可以这样做的CDN),否则恐怕我的回答将是“您不能”。

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

我认为,到目前为止,您最好的选择是简单,技术含量低的选择-

为访问者提供一种语言选择,并允许他们从任何页面切换语言。这也避免了意外情况-如果我用英语用Google搜索,但是我会说西类牙语,则应该看到我用Google搜索过的英语页面,然后在感觉满意时切换到西类牙语。

关于localization - Cloudfront/S3 : Server different file depending on Request Header,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22907349/

10-13 04:49