我为网站设置了自定义404页面,工作正常,如下所示: 当我点击不存在的mysite.com/fdsafsadfdsa时,会显示自定义404页面。
但是,如果我在url末尾添加了一个urlencoded'/',它是'%2f',mysite.com / fdsafsadfdsa%2f,这就让我找不到apache 404。
看起来apache决定处理这个404本身,而不是传递给Django
有人知道为什么会这样吗?
答案 0 :(得分:0)
原来这是Apache / Nginx中的一个问题。有人之前将此问题提交给Django项目,请参阅此处:https://code.djangoproject.com/ticket/15718 从机票中引用,有一个解决方法:
经过调查,我发现第二个问题(直接来自apache的404错误)与django无关,可以通过在apache配置中添加“AllowEncodedSlashes On”来避免。不幸的是,apache用/本身替换%2f,因此行为与django提供的简单http服务器完全相同。在Apache 2.2.18(我还没有发布)中,AllowEncodedSlashes允许值为NoDecode。使用值NoDecode,可以接受此类URL,但编码的斜杠不会被解码,而是保留在其编码状态。同时我正在使用解决方法
request_uri = force_unicode(environ.get('REQUEST_URI', u'/'))
if u'?' in request_uri:
path_info,query = request_uri.split('?',1)
else:
path_info,query = request_uri,''
而不是原始
path_info = force_unicode(environ.get('PATH_INFO', u'/'))
核心/处理程序/ wsgi.py中的