2015-09-19 1 views
3

У меня есть приложение GAE, в котором статические файлы, определенные правилами в файле yaml, под двумя разными именами доменов, настроенными в DNS, и новый, но в остальном это один и тот же контент для каждого. Я бы хотел перенаправить запросы из старого домена в новый домен. Я видел this question, но это теряет способность использовать статические обработчики ресурсов в yaml из того, что я могу сказать, и мне нужно будет настроить статический актив, явно работающий на моем main.py. Есть ли простой способ (идеально в самом файле yaml) сделать перенаправление, когда имя хоста является старым доменом, но сохранить мои статические правила файла для нового домена?перенаправляет все запросы из одного домена в другой с помощью Google App Engine, но сохраняет правила статической маршрутизации в yaml

Update

Вот полное решение, которое я в конечном итоге с помощью:

### dispatch.yaml ### 

dispatch: 
- url: "*my.domain/*" 
    module: redirect-module 

### redirector.yaml ### 

module: redirect-module 
runtime: python27 
threadsafe: true 
api_version: 1 

skip_files: 
- ^(?!redirector.py$) 

handlers: 
# Redirect everything via our redirector 
- url: /.* 
    script: redirector.app 

### redirector.py ### 

import webapp2 

def get_redirect_uri(handler, *args, **kwargs): 
    return 'https://my.domain/' + kwargs.get('path') 

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

Некоторых дополнительных документов: https://cloud.google.com/appengine/docs/python/modules/routing#routing_with_a_dispatch_file

+0

Это еще работает? Я не могу заставить его работать в моем домене –

+0

@AlokKumar, какие ошибки вы получаете? Вы не получаете ожидаемый код статуса http при запросе URL-адреса старого домена, и если нет, что вы видите? (Похоже, webapp2 был обновлен с тех пор, как я изначально написал это, хотя нет очевидных связанных поломки: https://github.com/GoogleCloudPlatform/webapp2/blob/master/CHANGES) Или вы исследовали вопрос о том, является ли проблема с правилами yaml? Разумеется, Google мог бы изменить его обработку за последние 2 года. – qix

+0

Я не ошибаюсь. То, что я хотел, было то, что, если кто-либо называет www-ссылку, он должен перенаправить на ссылку, отличную от www. У меня есть настройка. Вы можете проверить это здесь https://www.cloudnowtech.com Я предполагаю, что модуль перенаправления работает, потому что, когда я развернул новую версию, удалив модуль redirect из yaml, он обновил только экземпляр по умолчанию, а www по-прежнему показывал старую версию. Поэтому модули перенаправления работают, но я хочу, чтобы URL-адрес был изменен. –

ответ

3

AFAIK вы не можете сделать перенаправление для статических активов, поскольку GAE обслуживает их напрямую в соответствии с правилами файла .yaml, даже не нажимая код приложения.

Вы можете добавить модуль (назовем его редирект-модуль, например) для вашего приложения, маршрут ВСЕГО старые URL-адрес домена на него с помощью диспетчера файлов и используйте динамический обработчик в этом модуле для перенаправления URL-адреса на новый эквивалент домена, по линиям, предложенным в ответах на вопрос, на который вы ссылались. Новые запросы домена будут продолжать работать без изменений, которые будут использоваться как статические активы или существующий модуль (ы) вашего приложения. dispatch.yaml файл будет выглядеть следующим образом:

application: your-app-name 
dispatch: 
    - url: "your.old.domain.com/*" 
    module: redirect-module 

Другая мысль, которая приходит в голову (я на самом деле не делать этого, так что я не уверен, если это будет решить вашу проблему), чтобы избежать перенаправлять вообще и вместо того, чтобы сопоставлять ваше приложение с двумя разными доменами, сопоставляйте его только с новым доменом и превращайте старый домен в DNS CNAME/alias в новый домен.

+0

Спасибо за предложения! Я не верю, что маршрут DNS работает для меня из-за необходимости поддерживать SSL на обоих, но спасибо за подтверждение моих подозрений и пример того, как обойти это. – qix

+0

Я очень новичок в GAE, не могли бы вы просто разработать, где записать этот модуль перенаправления? Я изо всех сил пытаюсь перенаправить свой www в голый домен. – anshulix

+0

@anshulix: вы на самом деле ** нуждаетесь в **, чтобы перенаправить? (ненужное дополнительное перенаправление не является чем-то приятным). Разве это не просто сопоставление приложения с «www» и «голыми доменами», работающими на вас? См. Http: // stackoverflow.com/questions/34826320/google-cloud-dns-point-naked-domain-to-www/34830367 # 34830367 –

Смежные вопросы