【问题标题】:How to do URL masking with Django?如何使用 Django 进行 URL 屏蔽?
【发布时间】:2020-01-01 23:31:55
【问题描述】:

在 Django 1.9 项目中我需要重定向:

https://example.com/app/

https://examplebucket.s3.amazonaws.com/app/index.html

但我需要 https://examplce.com/app/ 仍然可以在浏览器地址栏上看到...

我知道这在理论上使用 Django 一定是可能的,因为之前从事此项目的团队进行了设置以从 S3 存储桶中提供 /static/ 媒体文件。如果我通过https://example.com/static/app/index.html 访问这些静态文件,它们是从 S3 存储桶提供的,但浏览器地址栏仍然显示我输入的原始 url。

我正在部署一个 Ionic Browser 项目,我希望从 S3 提供文件(包括索引),但 url 需要对用户友好,这就是原因。

【问题讨论】:

  • 这是不可能的,浏览器总是显示所服务文件的位置。同样对于静态文件,您不想重定向,只需指向 HTML 源中的 AWS 位置 (<img src="https://blabla.s3.amazonaws.com/...">)。您可以做的是设置 CDN(例如 CloudFront)以使用属于您的子域(例如 static.example.com)。然后你指向那个 (<img src="https://static.example.com/...">)。
  • 请注意,您的问题并不清楚什么是静态文件。 index.html 本身是静态文件还是从您的 django 服务器提供的 包含 静态文件的网页?如果有,请查看index.html的来源,index.html中包含的图片的url是什么?
  • @dirkgroten index.html 是一个引用静态文件(主要是 js)的 html 文件,但我需要 index.html 文件和 js 文件位于同一个域中,因为其他所有类型CORS 问题出现
  • 正如我所说,如果您将静态文件托管在 AWS(或任何不是您的服务器的服务器)上,这是不可能的。但是 CORS 应该不是问题,您可以在您的 S3 存储桶中 enable CORS,以便您的网站可以访问您的 s3 资源。对于您的 CloudFront 分配也是如此,此外,您可以配置自己的子域,这样对于查看源或在单独的选项卡中打开您的图像之一的用户来说,它“看起来”更好。但是您仍然需要配置 AWS 以发送正确的 CORS 标头。

标签: django amazon-s3 ionic4


【解决方案1】:

执行此操作的旧(肮脏)方式是基于帧的转发。

您在/app/ 的页面上设置了一个 iframe,它指向真正的应用程序,让 url 保持不变。

由于安全问题(无法确定您在哪里输入凭据)和书签问题(网址始终相同,因此无法为内页添加书签),这不是一个好的做法。

另一种选择是设置一个代理脚本,它只接受 url,将其转换为等效的 aws url,下载它然后返回它。如果它有多个区域,这将破坏您的云托管的好处......它总是会通过您的服务器的瓶颈。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2018-12-10
    • 1970-01-01
    相关资源
    最近更新 更多