使用或不使用/可以使Django URL工作

时间:2012-01-16 20:15:27

标签: python django

我有一个django应用程序,在每个URL conf的末尾都有/。例如:

# user home page
(r'^home/$', 'user_home_page'),

但是,我注意到这导致我的服务器上出现大量重定向,因为当人们不添加/时,它会重定向它们。有没有办法让它接受两个没有重定向,除了做:

# user home page
(r'^home$', 'user_home_page'),
(r'^home/$', 'user_home_page'),

还是应该避免像这样的网址?

6 个答案:

答案 0 :(得分:8)

虽然您可以通过使用以下方式接受两者而不进行重定向:

(r'^home/?$', 'user_home_page'),

这不是最好的SEO练习,因为它看起来像你有重复的内容,你的点击将分为两页。

答案 1 :(得分:6)

您可以修改APPEND_SLASH Django设置,我之前没有使用它。

  

您可能想知道如果有人请求URL / hello会发生什么   (也就是说,没有斜杠)。因为我们的URLpattern需要一个   尾部斜杠,该URL不匹配。但是,默认情况下,任何   请求与URLpattern不匹配且不以URL结尾的URL   斜杠将被重定向到带有斜杠的同一URL。   (这是由APPEND_SLASH Django设置规定的,即   见附录D。)

这取自http://djangobook.com/en/2.0/chapter03/

答案 2 :(得分:2)

模式为Python regular expressions。怎么样:

(r'^home(/?)$', 'user_home_page'),

答案 3 :(得分:2)

  

我应该避免像这样的网址吗?

是。 Django已经为你处理了这个问题。

请参阅:https://docs.djangoproject.com/en/1.3/ref/middleware/#module-django.middleware.common

  

如果APPEND_SLASH为True且初始网址未以斜杠结尾,   并且在URLconf中找不到它,然后形成一个新的URL   最后添加一个斜杠。如果在URLconf中找到此新URL,   然后Django将请求重定向到这个新URL。否则,   初始网址照常处理。

答案 4 :(得分:1)

答案 5 :(得分:0)

您需要确保您的应用程序使用/一致,选择使用哪个,并且301将流氓变体重定向到正确的规范。

应该只有一个版本的页面,并且在大多数情况下,正确的解决方案是301重定向到规范版本。

在某些情况下,如果有其他参数用于跟踪,您还应该在头部定义规范。

通过在您的APP中使用一致的网址,在指向您应用的链接中使用网络,您就不会有很多重定向。