gpt4 book ai didi

google-app-engine - 在 GAE 中使用自定义域规范化静态站点的 URL

转载 作者:行者123 更新时间:2023-12-01 08:48:28 25 4
gpt4 key购买 nike

我在 GAE 上运行一个静态站点,并使用启用了 SSL 证书的自定义域(我们称之为 example.com)。我想将 URL 规范化为 https://www.example.com/。这意味着捕获对 myproject.appspot.com、纯 HTTP 和/或裸域的任何请求,并通过 HTTPS 重定向到 www

我知道不可能将重定向逻辑放入 app.yaml 中,但理想情况下我希望将静态文件服务逻辑保留在那里,并且只有用于重定向的应用程序代码。 (而不是在应用程序代码中进行静态服务。)

这是我到目前为止所拥有的:

文件app.yaml的内容:

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /
static_files: www/index.html
upload: www/index.html

- url: /(.*)
static_files: www/\1
upload: www/(.*)

文件dispatch.yaml的内容:

dispatch:
- url: "myproject.appspot.com/*"
module: canonicalizer

文件canonicalizer.yaml的内容:

module: canonicalizer
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
script: canonicalizer.app

文件canonicalizer.py的内容:

import webapp2

def get_redirect_uri(handler, *args, **kwargs):
return 'https://www.example.com/' + kwargs.get('path')

app = webapp2.WSGIApplication([
webapp2.Route('/<path:.*>',
webapp2.RedirectHandler,
defaults={'_uri': get_redirect_uri, '_code': 302}),
], debug=True)

如您所见,到目前为止我仅尝试实现重定向 myproject.appspot.com。我还没能让它发挥作用; myproject.appspot.com 仍然提供内容,而不是重定向到自定义域。

我看到了a similar SO question并将其用作我上面的代码的基础。我相当密切地关注它,所以我不确定它是否已经过时或缺少细节。

我对webapp2不太熟悉。也对不同框架甚至不同编程语言的解决方案持开放态度。

最佳答案

正如 sllopis 在他们的回答中所说,HTTP 到 HTTPS 的重定向可以通过 secure: always 来实现。元素。

我想做的其余事情需要在应用程序代码中完成。我的答案中的代码是在正确的轨道上,但我对服务在 GAE 中的工作方式以及 dispatch.yaml 有一些困惑。 。这是我的最终代码:

<application root>/app.yaml

runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /
static_files: www/index.html
upload: www/index.html
secure: always
redirect_http_response_code: 301

- url: /(.*)
static_files: www/\1
upload: www/(.*)
secure: always
redirect_http_response_code: 301

<application root>/dispatch.yaml

dispatch:
- url: "*.appspot.com/*"
service: canonicalizer

- url: "example.com/*"
service: canonicalizer

<application root>/canonicalizer/app.yaml

service: canonicalizer
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
script: canonicalizer.app

<application root>/canonicalizer/canonicalizer.py

import webapp2

def get_redirect_uri(handler, *args, **kwargs):
return 'https://www.justinforcentral.com/' + kwargs.get('path')

app = webapp2.WSGIApplication([
webapp2.Route('/<path:.*>',
webapp2.RedirectHandler,
defaults={'_uri': get_redirect_uri, '_code': 301}),
], debug=False)

这允许完成所有重定向,同时仍然保持通过static_files路由静态站点的能力。处理程序。

顺便说一句,我也没有意识到简单地做 gcloud app deploy .从应用程序根目录仅部署默认服务。为了部署这整个事情,我必须运行 gcloud app deploy . dispatch.yaml canonicalizer .

关于google-app-engine - 在 GAE 中使用自定义域规范化静态站点的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59743875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com