我有一个django应用程序,在每个URL conf的末尾都有/。例如:
# user home page
(r'^home/$', 'user_home_page'),
但是,我注意到这导致我的服务器上出现大量重定向,因为当人们不添加/时,它会重定向它们。有没有办法让它接受两个没有重定向,除了做:
# user home page
(r'^home$', 'user_home_page'),
(r'^home/$', 'user_home_page'),
还是应该避免像这样的网址?
答案 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。)
答案 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)
改用Django REMOVE_SLASH中间件。
答案 5 :(得分:0)
您需要确保您的应用程序使用/一致,选择使用哪个,并且301将流氓变体重定向到正确的规范。
应该只有一个版本的页面,并且在大多数情况下,正确的解决方案是301重定向到规范版本。
在某些情况下,如果有其他参数用于跟踪,您还应该在头部定义规范。
通过在您的APP中使用一致的网址,在指向您应用的链接中使用网络,您就不会有很多重定向。