apache没有将请求传递给Django(未找到404)

时间:2017-10-02 23:03:54

标签: django apache

我为网站设置了自定义404页面,工作正常,如下所示: 当我点击不存在的mysite.com/fdsafsadfdsa时,会显示自定义404页面。

但是,如果我在url末尾添加了一个urlencoded'/',它是'%2f',mysite.com / fdsafsadfdsa%2f,这就让我找不到apache 404。

看起来apache决定处理这个404本身,而不是传递给Django

有人知道为什么会这样吗?

1 个答案:

答案 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中的

相关问题