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

 白羊浅蓝色 发布于 2023-02-08 13:45

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

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

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

我似乎无法在S3文档中找到任何常规查询字符串,除了身份验证的东西,我认为这不会解决我的问题.

2 个回答
  • 您可以切换到使用锚点/哈希而不是查询字符串.例如,而不是

    http://someS3domain.com?variable=1
    

    你可以使用:

    http://someS3domain.com#variable=1
    

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

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

    window.location.hash
    

    2023-02-08 13:48 回答
  • 如果您正在使用索引文档,那么......

    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(之前没有尾部斜杠?),则避免重定向,并且您的查询字符串应保持不变.

    2023-02-08 13:49 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有