Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如何在AmazonS3静态网站中获取查询字符串?_Amazon Web Services_Amazon S3 - Fatal编程技术网

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

Amazon web services 如何在AmazonS3静态网站中获取查询字符串?,amazon-web-services,amazon-s3,Amazon Web Services,Amazon S3,我在AmazonS3上托管一个静态网站。我的一些客户端javascript解析查询字符串以控制HTML。这在本地运行良好,但在S3托管版本上,查询字符串似乎从请求中删除 我使用查询字符串的动机是希望能够根据用户在上一页上所做的操作在页面之间传递状态 这种方法可行吗?我是否违反了S3静态网站的“静态”要求 在S3文档中,我似乎找不到任何关于一般查询字符串的提及,除了,我认为这并不能解决我的问题。您可以切换到使用锚/哈希而不是查询字符串。例如,代替 http://someS3domain.com?v

我在AmazonS3上托管一个静态网站。我的一些客户端javascript解析查询字符串以控制HTML。这在本地运行良好,但在S3托管版本上,查询字符串似乎从请求中删除

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

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


在S3文档中,我似乎找不到任何关于一般查询字符串的提及,除了,我认为这并不能解决我的问题。

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

http://someS3domain.com?variable=1
您可以使用:

http://someS3domain.com#variable=1
锚定/哈希与查询字符串之间的最大区别在于,查询字符串被发送到服务器,而锚定/哈希不被发送。在您的情况下,因为您使用S3进行静态托管,所以无论如何都不需要将查询字符串发送到服务器

在Javascript中,可以使用以下方法获取锚定/哈希字符串的值:

window.location.hash

如果您使用的是索引文档,其中

http://bucket.example.com/foo
…实际上将文档显示在
foo/index.html
上,那么您的解决方法将是避免S3在显示索引页面之前进行重定向

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

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


但是如果您的链接直接指向
/foo/?some\u thing=here&something\u else=too
,而不是指向
/foo?some\u thing=here&something\u else=too
(在
之前没有尾随斜杠?
)然后避免重定向,并且查询字符串应保持完整。

在您单击以转到站点上的“下一个”页面的链接中是否存在查询字符串(因为javascript正在生成它们),然后在页面加载之前从地址栏中消失?还有,你在使用S3的索引文档吗?@Michael sqlbot是的,没错。我不知道S3索引文档是什么,所以我猜我没有使用它们。我刚刚学习了在S3上构建静态网站的教程。索引文档:
http://example.com/foo
返回位于
http://example.com/foo/index.html
。你在做吗?哦,是的,我在做。交叉柱。。。这也是我的经验,但如果将CloudFront放在S3之上(这是便宜、简单、标准的),您确实可以“转发查询字符串”来保留参数。@doublejosh除非行为发生改变,否则问题是S3本身在生成
位置
标头时不会保留查询字符串,当您使用索引文档并且在原始URL中不包含尾随斜杠时。。。因此,让CloudFront将它们转发到S3不会改变任何事情。(
/foo?bar=1
在呈现对象
foo/index.html
之前,重定向到
/foo/
,而不是像预期的那样,
/foo/?bar=1
)。如果使用CloudFront,则S3将不会提供URL。。。它将由CF在边缘提供。。。查询字符串将保持不变。我已经这样做了,并且在网上发现了许多帖子解释说这是解决方案。@doublejosh我不认为我们在这里讨论的是同一件事,但是如果你想在评论中添加一两个链接,我很乐意了解这两个服务交互方式的新情况,如果合适的话,扩展我的答案。我在之前的问题中添加了一个跨帖子链接。但现在我觉得自己陷入了一个循环,对自己的记忆在这个解决方案中是否准确失去了信心:/