gpt4 book ai didi

python - 如果 URL 与 slug 不匹配,则规范链接和 301 重定向

转载 作者:太空狗 更新时间:2023-10-29 21:01:50 25 4
gpt4 key购买 nike

我正在尝试在 django/python 中实现类似于堆栈溢出的 URL 方案。

例如pk 与一小段标题一起存储在 URL 中,因此对于这个问题 (id #4787731),URL 是

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

如果我稍后更改标题(或只是在 url 中随机添加一些内容),那么该网站仍然会知道我在寻找哪个问题(通过 ID),并将 301 重定向到正确的 URL - 例如试试。

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

所以

  • 在我的页面中包含规范链接的最佳方式是什么

(我可以使用 get_absolute_url 吗)

  • 识别当前 URL 与规范链接不匹配并发出 301 的最佳方法是什么?

注意 - 这个问题很相似,但只针对 generating the slug on the fly or statically. 的情况

最佳答案

1:如果有 301,我认为使用规范标签没有意​​义。

让我们想象一下您将 URL 从 /q/111/hello-world 更改为 /q/111/foobar 的场景。引擎不会假设这两者是相等的,除非它们访问原始 url,上面带有指向 /q/111/foobar 的规范标签(它不会,因为它现在是 301,切断任何页面之间关系的证明)。

2:我会直接去做。定义一个非唯一的 slug 字段并与详细 View 中捕获的 URL 进行比较。

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

def get_absolute_url(self):
return "/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})

关于python - 如果 URL 与 slug 不匹配,则规范链接和 301 重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4787731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com