Django奇怪的url调用错误

Django奇怪的url调用错误,django,url,Django,Url,我有我的Django应用程序。我有一个重定向URL(比如404页面),在没有其他URL匹配时重定向。现在,如果任何url被称为 mysite.com/something 我被重定向到404页面。但是 mysite/something/ 很好 添加到“全部”结尾的重定向url: url(r'^.*/',theview), 当我从url.py中删除重定向url时,问题就被清除了,上面的url可以正常工作(没有/最后)。为什么会出现错误?首先,最好链接到并提及您正在使用我提供给您的黑客,因为(a

我有我的Django应用程序。我有一个重定向URL(比如404页面),在没有其他URL匹配时重定向。现在,如果任何url被称为

mysite.com/something
我被重定向到404页面。但是

mysite/something/
很好

添加到“全部”结尾的重定向url:

url(r'^.*/',theview),

当我从url.py中删除重定向url时,问题就被清除了,上面的url可以正常工作(没有/最后)。为什么会出现错误?

首先,最好链接到并提及您正在使用我提供给您的黑客,因为(a)这不是正常设置,(B)有人可能会想出比我更好的主意

其次,由于正常的url处理,您会看到这种行为。请参见,URL
mysite.com/something
mysite.com/something/
不相同。要将其与django的URL匹配,区别在于:

url(r'^something/$')
url(r'^something$')
由于差别如此之小,当使用正常设置时,在找不到url后,不带正斜杠*的url将自动尝试添加一个url并对其进行测试。只有到那时,它才会放弃并将您转发到404页面

但是,在您的设置中,catch-all url阻止第二轮,因为它确实应用于url,而不使用正斜杠。我的解决方案?别担心。您使用此黑客的唯一原因是因为
Debug=True
意味着一个调试页面而不是您的自定义404页面,这是您在移动到生产环境时不会遇到的问题


*非常感谢@Alasdair在评论中指出了这一点

你的URL.py到底是什么样子的?@RemcoGerlich:看编辑吧,不是浏览器添加了斜杠,而是现在,如果我将所有
something/$
更改为
something$
,这样行吗?@Alasdair:有没有办法让应用程序在检查URL之前附加斜杠?@AswinMurugesh是的,使用
something$
可以。您也可以创建一个正则表达式来接受正斜杠或不接受任何内容,但这是一个您不需要做的大量工作。只需记住在开发中使用完全正确的URL,以后在转入生产时,只需移除黑客并使用适当的404@AswinMurugeshDjango common中间件仅在URL配置中找不到URL时才附加斜杠。如果要在检查URL配置之前附加斜杠,则必须编写自己的中间件。我认为这样做会导致其他问题,并且是错误的方法。为什么不直接设置
debug=False
,并删除catch-all URL模式?无论如何,您不应该在生产环境中运行
debug=True