如何在Amazon S3静态网站中获取查询字符串?

时间:2013-12-23 21:16:54

标签: amazon-web-services amazon-s3

我在Amazon S3上托管一个静态网站。我的一些客户端javascript解析查询字符串来控制HTML。这在本地工作正常,但在S3托管版本上,查询字符串似乎从请求中删除。

我使用查询字符串的动机是我希望能够根据用户在上一页上所做的事情在页面之间传递状态。

这种方法可行吗?我是否违反了S3静态网站的“静态”要求?

除了authentication stuff之外,我似乎无法在S3文档中找到任何常规查询字符串,我认为这不会解决我的问题。

2 个答案:

答案 0 :(得分:25)

如果您正在使用索引文档,那么......

http://bucket.example.com/foo

...实际上在foo/index.html显示文档,然后您的解决方法是避免在显示索引页之前S3重定向。

对于指向/foo页面的链接,您实际上应该创建指向/foo/的链接(使用尾随斜杠之后的查询字符串;可能看起来很奇怪,但它非常有效)。这是因为当您的浏览器请求一个会导致索引文档但不以尾部斜杠结尾的页面时,S3会发送一个重定向,以便您的浏览器在URL的末尾有一个尾部斜杠。如果不是这样,该页面上的相对链接将引用错误的路径。

问题的根本问题是,当S3将重定向从/foo发送到/foo/时,它会剥离查询字符串。他们不必那样设计,但这就是他们所做的,并且似乎没有一个设置可以修改这种行为。

但是,如果您的链接直接指向/foo/?some_thing=here&something_else=too而不是指向/foo?some_thing=here&something_else=too?之前没有尾随斜杠),则会避免重定向,并且您的查询字符串应保持不变。< / p>

答案 1 :(得分:5)

您可以切换到使用锚点/哈希而不是查询字符串。例如,而不是

http://someS3domain.com?variable=1

你可以使用:

http://someS3domain.com#variable=1

锚点/哈希与查询字符串之间的最大区别在于查询字符串是发送到服务器而锚点/哈希不是。在您的情况下,由于您使用S3进行静态托管,因此您无需将查询字符串发送到服务器。

在Javascript中,您可以使用以下命令获取锚点/哈希字符串的值:

window.location.hash