Как перенаправить все URL с помощью Google App Engine - PullRequest
19 голосов
/ 29 июня 2009

Как настроить файл app.yaml для перенаправления всех URL-адресов на другой URL-адрес? Например, я хочу, чтобы http://test.appspot.com/hello или http://test.appspot.com/hello28928723 перенаправили на http://domain.com.

В данный момент я работаю только со статическими файлами. Вот мой файл app.yaml:

application: testapp
version: 1
runtime: python
api_version: 1

handlers:
- url: (.*)/
  static_files: static\1/index.html
  upload: static/index.html

- url: /
  static_dir: static

Ответы [ 7 ]

40 голосов
/ 24 февраля 2012

Webapp2 имеет встроенный обработчик перенаправления

Не нужно накатывать свой собственный обработчик; Webapp2 уже поставляется с одним.

application = webapp2.WSGIApplication([
    webapp2.Route('/hello', webapp2.RedirectHandler, defaults={'_uri':'http://domain.com'}),
    webapp2.Route('/hello28928723', webapp2.RedirectHandler, defaults={'_uri':'http://domain.com'}),
], debug=False)

Аргумент _uri - это то, что класс RedirectHandler использует для определения места назначения. Google Fu потребовалось много времени, чтобы найти документацию по этому вопросу, но она отлично работает в моем приложении.

Обновление:

Я предполагаю, что вы знаете об этом, но вам нужно изменить маршрут для всех:

- url: /
  static_dir: static

Кому (версия python27):

- url: /.*
  script: main.application

Или: (до Python27 версия)

- url: /.*
  script: main.py

main.py - это файл, содержащий обработчик запроса + маршруты.

Примечание. В GAE нет единственного способа обработки перенаправлений из-за природы статических файлов. По сути, нет никакого способа сделать перенаправление в app.yaml в одиночку.

8 голосов
/ 18 августа 2013

Все, что вам нужно (заменить app-id, http://example.com):

  • app.yaml

    application: app-id
    version: 1
    runtime: python27
    api_version: 1
    threadsafe: false
    
    handlers:
    - url: /.*
      script: main.py
    
  • main.py:

    from google.appengine.ext import webapp
    from google.appengine.ext.webapp.util import run_wsgi_app
    
    class AllHandler(webapp.RequestHandler):
        def get(self):
            self.redirect("http://example.com", True)
    
    application = webapp.WSGIApplication([('/.*', AllHandler)])
    
    def main():
        run_wsgi_app(application)
    
    if __name__ == "__main__":
        main()
    
5 голосов
/ 29 июня 2009

Вы можете легко перенаправить все запросы с помощью обработчика Python. Что-то вроде

class FormHandler(webapp.RequestHandler):
  def post(self):
    if processFormData(self.request):
      self.redirect("http://domain.com")
4 голосов
/ 01 мая 2012

Вот скрипт Python, который будет выполнять перенаправление:

from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app

class MainPage(webapp.RequestHandler):
  def get(self, path):
    self.redirect("http://example.com", permanent=True)
  def head(self, path):
    self.redirect("http://example.com", permanent=True)

application = webapp.WSGIApplication(
            [
                (r'^(.*)', MainPage)
            ])

def main():
   run_wsgi_app(application)

if __name__ == "__main__":
    main()
3 голосов
/ 06 июня 2014

Если вы хотите static-files-only способ сделать "перенаправления", то сделайте следующее:

В app.yaml, поместите это как всеобъемлющее, в конце файла:

-   url: /.*
    static_files: root/redirect.html
    upload: root/redirect.html

Затем в файле root / redirect.html поместите это:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="refresh" content="0;URL=/" />
        <script>
            location.replace("/");
        </script>
    </head>
    <body></body>
</html>

В этом примере перенаправляются все неизвестные URL-адреса в корень (т. Е., /). Если вам нужен другой URL, просто замените http://mydomain.com в соответствующих местах.

0 голосов
/ 09 сентября 2017

Обработчик перенаправления для webapp2 (webapp2.RedirectHandler), упомянутый в предыдущем ответе, не будет работать для запросов на публикацию, поскольку он не содержит метод публикации (см. https://github.com/GoogleCloudPlatform/webapp2/blob/master/webapp2.py),, поэтому вам нужно будет свернуть свой собственный питон обработчик, если он связан с сообщениями. Что-то вроде следующего:

import webapp2

class MainPage(webapp2.RequestHandler):


    def post(self):
        self.redirect('http://example.com')


application = webapp2.WSGIApplication([
('/.*', MainPage)
], debug=False)
0 голосов
/ 03 сентября 2015

Отбрасывая ответ Эвана, чтобы перенаправить все запросы, вы можете использовать регулярные выражения, чтобы сделать что-то вроде:

import webapp2
from webapp2_extras.routes import RedirectRoute

app = webapp2.WSGIApplication([
     RedirectRoute('/<:.*>', redirect_to='/')
    ], debug=False)

Для официальных документов проверьте:

https://webapp -improved.appspot.com / апи / webapp2_extras / routes.html

https://webapp -improved.appspot.com / апи / webapp2.html # webapp2.Route. INIT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...