2012-03-19 8 views
8

मुझे दो कस्टम डोमेन (एक के साथ एक और www सबडोमेन के बिना) के साथ हीरोोक (सीडर स्टैक) पर चलने वाला पाइथन फ्लास्क ऐप मिला है। मैं सभी आने वाले अनुरोधों को www पर रीडायरेक्ट करना चाहता हूं। अनुरोध किए गए संसाधन का संस्करण (this question के विपरीत)। मुझे लगता है कि मुझे इसके लिए कुछ डब्लूएसजीआई मिडलवेयर चाहिए लेकिन मुझे एक अच्छा उदाहरण नहीं मिल रहा है।मैं www पर कैसे रीडायरेक्ट करूं? Heroku पर मेरी फ्लास्क साइट का संस्करण?

मैं यह कैसे कर सकता हूं?

+0

स्पष्टीकरण के लिए, आपके पास 'example1.com', 'example2.com' और' www.example2.com' है। आप सभी अनुरोधों को 'example1.com' और' example2.com' पर 'www.example2.com' पर रीडायरेक्ट करने के लिए चाहते हैं। क्या वो सही है? –

+0

बस example.com और www.example.com उदाहरण के साथ www.example.com/ www.example.com/

+0

पर रीडायरेक्ट कर रहा है क्या आप इसे DNS के साथ नहीं कर सकते? आप एप्लिकेशन परत पर ऐसा क्यों करना चाहते हैं? –

उत्तर

12

एक अलग हेरोोकू ऐप बनाने की तुलना में एक आसान समाधान before_request फ़ंक्शन होगा।

from urlparse import urlparse, urlunparse 

@app.before_request 
def redirect_nonwww(): 
    """Redirect non-www requests to www.""" 
    urlparts = urlparse(request.url) 
    if urlparts.netloc == 'example.com': 
     urlparts_list = list(urlparts) 
     urlparts_list[1] = 'www.example.com' 
     return redirect(urlunparse(urlparts_list), code=301) 

यह "HTTP 301 स्थायी रूप से" प्रतिक्रिया का उपयोग कर सभी गैर-www अनुरोधों को www पर रीडायरेक्ट करेगा।

+1

मैंने कुछ ऐसा ही किया, लेकिन एक इंडेक्स को बदलने की बजाय, आप 'urlparts = urlparts._replace (netloc =' www.example.com ')' और 'urlunparse (urlparts)' का उपयोग कर सकते हैं। –

1

request_started पर सुनने के लिए एक कार्य जोड़ने के लिए एक संभावित दृष्टिकोण होगा, और उपयुक्त पुनर्निर्देशन करें।

यह सिग्नल किसी भी अनुरोध प्रसंस्करण शुरू होने से पहले भेजा गया है, लेकिन जब अनुरोध संदर्भ स्थापित किया गया था। चूंकि अनुरोध संदर्भ पहले से ही बाध्य है, इसलिए ग्राहक अनुरोध के अनुसार मानक वैश्विक प्रॉक्सी के साथ अनुरोध का उपयोग कर सकते हैं।

+0

आशाजनक लग रहा है।यकीन नहीं है कि मैं अभी तक वहां से प्रतिक्रिया कैसे जारी करूंगा, लेकिन इसमें देख रहा हूं। –

+0

प्रारंभ में मैंने सोचा था कि आपको werkzeug के साथ गड़बड़ करने की आवश्यकता होगी, लेकिन यह फ्लास्क हुक के रूप में सीधे आगे नहीं है। अगर सिग्नल काम नहीं करते हैं, तो आप हमेशा कुछ [werkzeug midware] (http://werkzeug.pocoo.org/docs/middlewares/) पर अपना हाथ आजमा सकते हैं। –

3

हेरोकू डॉक्स के अनुसार, आपको www सबडोमेन (जैसे www.foo.com) बनाम शीर्ष डोमेन (उदाहरण के लिए foo.com) का उपयोग करने के बारे में सही जानकारी मिली है। सुप्रीम करने के लिए सभी अनुरोधों के लिए एक 301 permanent redirect को निर्दिष्ट उप डोमेन में

उपडोमेन पुनर्निर्देशन

उपडोमेन पुनर्निर्देशन परिणाम:

के शब्दों में: इस से निपटने के लिए उनके सुझाव एक DNS परत रीडायरेक्ट का उपयोग करने के लिए है डोमेन इसलिए सभी मौजूदा और भविष्य के अनुरोध ठीक से रूट किए गए हैं और पूर्ण www होस्टनाम उपयोगकर्ता के स्थान फ़ील्ड में प्रदर्शित है।

लगभग सभी DNS प्रदाता डोमेन पुनर्निर्देशन सेवाएं प्रदान करते हैं - कभी-कभी को डोमेन अग्रेषण भी कहा जाता है। DNSimple एक सुविधाजनक यूआरएल रीडायरेक्ट प्रदान करता है जो यहां देखे गए रीडायरेक्ट को Heroku-sslendpoint.com शीर्ष डोमेन www.heroku-sslendpoint.com सबडोमेन में रीडायरेक्ट करता है।

स्रोत: http://devcenter.heroku.com/articles/avoiding-apex-domains-dns-arecords#subdomain_redirection

आशा है कि मदद करता है!

+0

DNS आधारित समाधानों की समस्या यह है कि वे पथ को संरक्षित नहीं करते हैं। तो यह मेरे लिए काम नहीं किया। –

0

जो मैंने समाप्त किया वह दूसरा हेरोकू ऐप बना रहा था, उसमें गैर-www होस्टनाम असाइन कर रहा था और पथ को बरकरार रखते हुए www संस्करण पर रीडायरेक्ट करने के लिए सभी फ्लास्क मार्ग को पकड़ कर उपयोग कर रहा था।

संबंधित मुद्दे