2009-03-09 9 views
5

सामग्री डुप्लिकेशन से बचने के लिए, मैं अपनी साइट के पृष्ठों को कई यूआरएल (बिना स्लैश के पीछे या बिना) के सुलभ होने से बचाना चाहता हूं।रेल ऐप में यूआरएल के पिछला स्लैश को कैसे हटाया जाए? (एक एसईओ व्यू में)

वर्तमान में, यूआरएल

catalog/product/1 

और

catalog/product/1/ 

एक ही पृष्ठ पर ले जाते हैं। मेरा लक्ष्य यह है कि दूसरा यूआरएल पहले (पुनर्निर्देशन 301, निश्चित रूप से) पर रीडायरेक्ट करता है। मेरे होम पेज/स्पष्ट रूप से छोड़कर, मेरी साइट का कोई भी पृष्ठ पिछला स्लैश के साथ सुलभ नहीं होना चाहिए।

ऐसा करने का सबसे अच्छा तरीका क्या है? .htaccess या routes.rb का उपयोग करना? आप वह कैसे करेंगें?

एनबी: मैं पर रूबी के साथ विकसित कर रहा हूँ 1.2.3

उत्तर

9

मैं Apache's mod_rewrite का उपयोग करेंगे। इस प्रयास करें:

RewriteEngine on 
RewriteRule ^(.+)/$ $1 [R=301,L] 

संपादित करें: जोड़ा आर = 301। मैं अनुमान लगा रहा हूं कि बनाम डिफ़ॉल्ट 302 के लिए एक एसईओ लाभ है।

+0

जवाब के लिए धन्यवाद। मैंने अभी इसका परीक्षण किया और एक अजीब व्यवहार देखा: यह पृष्ठ के पूर्ण पथ को जोड़ने वाले यूआरएल को फिर से लिखता है! उदाहरण के लिए, यदि मैं http://www.mysite.com/test/ तक पहुंचने का प्रयास करता हूं, तो यह http://www.mysite.com/home/mysite/public_html/test पर रीडायरेक्ट करता है !! क्या तुम्हें समझ आया? – Flackou

+1

हम्म, आपको रीवाइटरूल लाइन से पहले "रिवाइटबेस /" जोड़ने की आवश्यकता हो सकती है। –

+0

ठीक है, यह अब काम करता है। आपकी मदद के लिए बहुत बहुत शुक्रिया। – Flackou

0

आप routes.rb का उपयोग करके रीडायरेक्ट नहीं प्राप्त कर सकते हैं। मुझे लगता है कि आप एक नियंत्रक बना सकते हैं जो केवल रीडायरेक्ट जारी करता है और '/' में समाप्त होने वाले सभी यूआरएल को इंगित करता है, लेकिन यह अनिवार्य रूप से जटिल लगता है। इसके बजाय, मैं एक .htaccess फ़ाइल में mod_rewrite का उपयोग करेंगे:

RewriteRule ^(.+)/$ $1 [R=301,L] 
15

आप यूआरएल वेब सर्वर में अंतर से स्वतंत्र होने के लिए फिर से लिखने के लिए http://github.com/jtrupiano/rack-rewrite इस्तेमाल कर सकते हैं: यहाँ कैसे। रेल आवेदन में

उदाहरण उपयोग:

config.gem 'rack-rewrite', '~> 1.0.0' 
require 'rack/rewrite' 
config.middleware.insert_before(Rack::Lock, Rack::Rewrite) do 
    r301 %r{(.+)/$}, '$1' 
end 
+3

रेल 4 में, आपको 'रैक :: लॉक' को 'रैक :: रनटाइम' (या अन्य) के साथ प्रतिस्थापित करने की आवश्यकता होगी, क्योंकि 'रैक :: लॉक' बहु-थ्रेडेड रेल वातावरण में डिफ़ॉल्ट रूप से सक्षम नहीं है रेल 4। –

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