2013-04-08 8 views
5

मैं मॉडलों के कुछ करने के लिए मल जोड़ा है, लेकिन क्योंकि एसईओ की मैं पुराने लिंक से 301 पुनर्निर्देशन करने की जरूरत है: वर्ष:रूबी 301 पुनर्निर्देशन

http://host.com/foo/1 

नया:

http://host.com/foo/foo_slug 

प्रश्न: इस मामले में 301 पुनर्निर्देशन को कैसे कार्यान्वित करें? और क्या यह अपरकेज्ड लिंक से 301 पुनर्निर्देशन को कार्यान्वित करना संभव है? इस तरह:

http://host.com/foo/FOO_SLUG -> http://host.com/foo/foo_slug 

उत्तर

13

आप अपने नियंत्रक कार्रवाई करने के लिए इस जोड़कर स्थिति 301 के साथ रीडायरेक्ट करने के लिए सक्षम होना चाहिए:

redirect_to "http://host.com/foo/foo_slug", :status => 301 

जानकारी के लिए redirect_to के लिए API दस्तावेज़ देखें।

और ऊपरी-चरण वाले यूआरएल को कम-से-कम संस्करणों में रीडायरेक्ट करने में कोई समस्या नहीं होनी चाहिए, हालांकि यह HTTP सर्वर परत जैसे कुछ अपाचे mod_rewrite नियमों से बेहतर तरीके से संभाला जा सकता है।

+0

.. या nginx config में पूरे यूआरएल डाल कर गहरे लाल रंग का प्रक्षेप का उपयोग करें। यात्री nginx – scones

+0

पर अधिक लोकप्रिय प्रतीत होते हैं, उत्तर के लिए धन्यवाद, रेल 3 सीधे मार्गों से 301 रीडायरेक्ट बनाने की अनुमति देता है। आरबी, क्या यह नियंत्रक या मार्गों में करना बेहतर है? – xamenrax

+1

आपके मामले में मुझे लगता है कि आपको इसे नियंत्रक कार्रवाई में करना होगा, क्योंकि मुझे लगता है कि आप डेटाबेस से स्लग को देखने जा रहे हैं? यदि ऐसा है, तो कोड को रिकॉर्ड करने और उसका स्लग ढूंढने के लिए कोड केवल नियंत्रक कार्रवाई के भीतर हो सकता है, न कि 'routes.rb' –

2

301 पुनर्निर्देशन के लिए अपने नियंत्रक में इस कोड को लिखें:

हेडर [ "स्थिति"] = "301 स्थायी रूप से स्थानांतरित" अपने मामले

में और दूसरा प्रश्न के लिए

redirect_to "http://host.com/foo/foo_slug" # यदि आपने हार्डकोड यूआरएल का उल्लेख किया है तो पूंजीकरण या डाउन केस का उपयोग करें।

अन्यथा स्ट्रिंग

+0

'स्थिति' शीर्षलेख को हार्ड-कोड की बजाय, क्यों न केवल ': status => 301' पास करें और रेल को उस हेडर को स्वरूपित करने दें (उदाहरण के लिए मेरा उत्तर देखें) –

+0

हाँ, यह एक और विकल्प है। धन्यवाद –

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