كيفية إعادة توجيه جميع عناوين URL باستخدام Google App Engine
-
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)