2011-01-24 15 views
8

से मेल नहीं खाता है तो मैं django/पायथन में स्टैक ओवरफ़्लो के समान यूआरएल योजना को लागू करने की कोशिश कर रहा हूं।कैनोनिकल लिंक और 301 रीडायरेक्ट यदि यूआरएल स्लग

उदा। (आईडी # 4,787,731) पी के इस प्रश्न के लिए तो शीर्षक का एक स्लग के साथ URL में संग्रहीत किया जाता यूआरएल

https://stackoverflow.com/questions/4787731/canonical-links-and-301-redirect-if-url-doesnt-match-slug 

है मैं बाद में शीर्षक को बदलते हैं (या बस यूआरएल में कुछ यादृच्छिक crud में डाल) तो साइट अभी भी जान जाएगी कि मैं कौन सा प्रश्न (आईडी द्वारा) के बाद हूं और 301 सही यूआरएल पर रीडायरेक्ट करेगा - उदाहरण के लिए प्रयत्न।

https://stackoverflow.com/questions/4787731/canonical-links-MODIFIED-URL 

तो

  • सबसे अच्छा तरीका है अपने पृष्ठों में विहित लिंक को शामिल करने क्या है इस तरह के

    < के रूप में लिंक rel = "प्रामाणिक" href = "https://stackoverflow.com/प्रश्न/4787731/विहित-लिंक-और-301-रीडायरेक्ट-अगर-यूआरएल-does not है-मैच स्लग ">

(मैं get_absol उपयोग कर सकते हैं ute_url)

  • यह पहचानने का सबसे अच्छा तरीका क्या है कि वर्तमान यूआरएल कैननिकल लिंक से मेल नहीं खाता है और 301 जारी करता है?

नोट - यह सवाल समान है, लेकिन केवल generating the slug on the fly or statically.

+0

के बजाय HttpResponsePermanentRedirect वस्तु का उपयोग करने के लिए एक स्थायी 301 पाने के लिए क्या होगा की आवश्यकता होगी यदि आप एक 301 करने की योजना बना रहे हैं तो एक कैनोलिक टैग का उपयोग? – Wolph

+0

अच्छा सवाल, यह वही है जो एसओ करते हैं, मुझे लगता है कि सभी आधारों को कवर करें। – Ryan

+0

संबंधित: [जेनेरिक दृश्य विवरण से रीडायरेक्ट डीजेगो में देखें] (https://stackoverflow.com/questions/6456586/redirect-from-generic-view-detailview-in-django) – User

उत्तर

6

1 के मामले को संबोधित करते: मैं विहित टैग का उपयोग करता है, तो वहाँ 301s वैसे भी कर रहे हैं में एक बिंदु वहाँ नहीं लगता।

चलो बस एक परिदृश्य की कल्पना करें जहां आप /q/111/hello-world से /q/111/foobar पर यूआरएल बदलते हैं। इंजन यह नहीं मानेंगे कि जब तक वे /q/111/foobar (जो यह नहीं है, क्योंकि यह अब 301 है, पृष्ठों के बीच संबंधों के किसी सबूत को अलग करने के लिए) पर कैननिकल टैग के साथ मूल यूआरएल पर जाएं।

2: मैं इसे सीधे आगे बढ़ाना चाहता हूं। एक गैर अद्वितीय slug फ़ील्ड को परिभाषित करें और अपने विस्तार दृश्य में कैप्चर किए गए URL बनाम तुलना करें।

# models 
class MyModel(models.Model): 
    # ... 
    non_unique_slug = models.SlugField() 

    def get_absolute_url(self): 
     return "https://stackoverflow.com/questions/%s/%s" % (self.id, self.non_unique_slug) 


# urls 
    r'^questions/(?P<id>\d+)/(?P<slug>[\w-]+)/$' 

# views 
def my_view(request, id, slug): 
    page = Page.objects.get(id=id) 
    if not slug == page.slug: 
     return http.HttpResponsePermanentRedirect(page.get_absolute_url()) 

    # render page 
    return direct_to_template(request, "foobar.html", {'page': page}) 
संबंधित मुद्दे