2013-11-26 72 views
7

我正在使用AWS S3托管一个静态网站(为了方便,易用,因为它便宜)。静态网站上的多个页面AWS S3

当我有多个HTML文件。我可以使用/name_of_file.html导航到他们。有没有办法路由HTML文件,所以URL代替/name_of_file?我不喜欢在我的网址中有一个.html扩展程序的丑陋,我宁愿避免做单页网站。

感谢

回答

9

只要你上传的文件与Content-type头设置为text/html时,页面会正常工作,如果你只是消除.html拓客年底,当你上传。

否则,想到的唯一选择是使用S3 Redirects,但只允许您“导航到”页面,而不在最后使用.html - 但随后您会看到浏览器重定向到.html命名的文件和.html仍将显示在地址栏中,因此可能不是赢家。

或者 - 这可能相当长,但也许值得一提 - 您可以通过运行HAProxy或其他反向代理服务器的EC2实例来请求请求,并重写(不重定向)不包含点的请求以附加' .html“,但是这样做并没有解除”易用性“方面的问题 - 尽管它可以允许您承载比每个帐户限额100个存储桶多得多的网站,如果您需要,可以保留多个网站“site”放在一个存储桶中,并为每个请求的对象路径附加一个前缀。在同一个AWS区域内的EC2和S3之间的数据传输是免费的,所以这不会产生额外的带宽费用 - 只是实例本身的成本。


更新(从注释):

的AWS控制台可能是因为选择的Content-Type作为元数据键略微反直觉那么只有提出几个选择,包括文字/平原,文本/ RTF但不是文本/ HTML ...但“价值”下拉列表只提供建议。在这里,任何半明智的东西都会被接受。

  • (斗)选择操作→上传
  • 点击“添加文件”
  • 选择要上传的文件,在对话框中
  • 点击“设置方式”,然后选中所有适用的复选框
  • 点击“设置权限”并勾选“让一切公开”(如果适用)
  • 点击“设置元数据”
  • 点击“添加更多的元数据”
  • 在“Key”下拉列表中,选择“Content-Type”,然后在“Value”框中键入 “text/html” - 它不是提供的选项,但这只是常用的列表类型,并不限制你可以放在盒子里。
  • 点击“开始上传”
+0

您是不是指HTML中的Content-type头?这不是用HTML5弃用吗? –

+1

不在HTML中...实际HTTP标头中的Content-Type标头,当它向对象发送GET或HEAD请求时,将被发送到浏览器。这些标题与S3中的对象一起存储。在控制台中查看你的对象的元数据,你会看到我指的是什么。上传文件时,控制台似乎会从扩展名中“猜出”相应的标题,但您也可以手动设置。 –

+0

@AlexChumbley感谢您的接受。我接受了你的第一个建议,从文件名中删除了扩展名并在S3中设置了“Content-Type”标题? –

相关问题