我有我的Django应用程序。当没有其他网址匹配时,我有一个重定向网址(比如404页面)要重定向。现在,如果任何url被称为
mysite.com/something
我被重定向到404页面。但
mysite/something/
工作正常。
重定向网址添加到所有内容的末尾:
url(r'^.*/',theview),
当我从urls.py中删除重定向网址时,问题就会被清除,上面的网址也会正常工作(最后没有/)。为什么会出错?
答案 0 :(得分:1)
首先,链接到your previous post并提及你正在使用我给你的黑客是个好主意,因为(A)这不是正常设置而且(B)有人可能想出来比我更好的想法
其次,由于正常的url处理,你会看到这种行为。请注意,网址mysite.com/something
和mysite.com/something/
不相同。为了与django的网址匹配,区别在于:
url(r'^something/$')
url(r'^something$')
由于差异非常小,因此在使用正常设置时,如果找不到没有正斜杠的网址django's common middlewere *将自动尝试添加并测试它。只有这样,它才会放弃并转发到404页面。
但是,在您的设置中,catch-all网址会阻止第二轮,因为它确实适用于没有正斜杠的网址。我的解决方案别担心。您使用此hack的唯一原因是因为Debug=True
表示调试页而不是您的自定义404页,这是您迁移到生产环境时不会遇到的问题
*非常感谢@Alasdair在评论中指出了这一点