كيفية إعادة توجيه جميع عناوين URL باستخدام Google App Engine

StackOverflow https://stackoverflow.com/questions/1058119

  •  21-08-2019
  •  | 
  •  

سؤال

كيف أقوم بتكوين ملف 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
هل كانت مفيدة؟

المحلول

ويمكنك إعادة توجيه جميع الطلبات بسهولة مع معالج الثعبان. شيء من هذا القبيل

class FormHandler(webapp.RequestHandler):
  def post(self):
    if processFormData(self.request):
      self.redirect("http://domain.com")

نصائح أخرى

يحتوي 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 وحده.

كل ما تحتاجه (استبدال 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()
    

وهنا هو السيناريو بيثون من شأنها أن تفعل إعادة التوجيه:

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()

إذا كنت تريد أ ملفات ثابتة فقط طريقة للقيام "بإعادة التوجيه" ثم قم بما يلي:

في 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 في الأماكن المناسبة.

من خلال استخلاص إجابة إيفان، لإعادة توجيه جميع الطلبات، يمكنك استخدام التعابير المنطقية للقيام بشيء مثل:

import webapp2
from webapp2_extras.routes import RedirectRoute

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

للتحقق من المستندات الرسمية:

https://webapp-improved.appspot.com/api/webapp2_extras/routes.html

https://webapp-improved.appspot.com/api/webapp2.html#webapp2.Route.فيه

ومعالج إعادة توجيه لwebapp2 (webapp2.RedirectHandler) المذكورة في الإجابة السابقة لن تعمل لطلبات المنصب، كما أنه لا يحتوي على أسلوب آخر (انظر <لأ href = "https://github.com/GoogleCloudPlatform/ webapp2 / فقاعة / الماجستير / webapp2.py "يختلط =" نوفولو noreferrer "> 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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top