2017-10-02 24 views
0

サイトのカスタム404ページの設定があります。これは正常に動作します: mysite.com/fdsafsadfdsaが存在しない場合はカスタム404ページが表示されます。ApacheがDjangoにリクエストを渡しません(404が見つかりません)

URLの末尾に '%2f'というURLエンコードされた '/'を追加すると、mysite.com/fdsafsadfdsa%2fと表示され、Apache 404が見つかりません。

Apacheは

誰もがなぜこれが起こっているのアイデアを持っているジャンゴまで渡すのではなく、この404自体を処理することを決めたように見えますか?

答えて

0

これはApache/Nginxの問題です。そして、誰かここを参照してください、前のDjangoプロジェクトにこの問題を送信:チケットからhttps://code.djangoproject.com/ticket/15718 と引用符を、回避策があります:

私は第二の問題(アパッチから直接、404エラー)がないことを発見した調査の後djangoに関連し、 "AllowEncodedSlashes On"をapache configに追加することで回避できます。残念ながら、Apacheは%2fを/自身に置き換えているので、動作はdjangoが提供する単純なhttpサーバとまったく同じです。 Apache 2.2.18(これはまだリリースされていません)では、AllowEncodedSlashesは値NoDecodeを許可します。値NoDecodeでは、このようなURLは受け入れられますが、エンコードされたスラッシュはデコードされずにエンコードされた状態のままです。一方、私はコア/ハンドラ/ wsgi.py

でこの問題を回避する代わりに、元

path_info = force_unicode(environ.get('PATH_INFO', u'/')) 

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,'' 

を使用しています

関連する問題