1

Nginx+FastCGI に Django サイトがあり、URL に特別な文字がある場合、Django によって解析されるビュー パラメータは引用符で囲まれていません。

例:

# python manage.py runfcgi port=8099 --settings=settings
browser url: http://127.0.0.1/Contact/%E6%9C%B1/
Django urlpattern: url(r'^(?i)Contact/(?P<q>.*)/$', 'qsearch'),

qsearch 関数によってキャッチされたパラメータ 'q' はu'%E6%9C%B1'です。ただし、引用符で囲まれていないため、 u'\u6731'であると予想されます。

runserver をデバッグに使用すると、同じプログラムが正常に動作して u'\u6731' を取得します。したがって、回避策を使用する必要があります:</p>

q = unicode(urllib.unquote(str(q)), 'u8')

Nginx 設定:

location / {
    fastcgi_pass 127.0.0.1:8099;
    include /home/fastcgi_django.conf;
}

fastcgi_django.conf:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name; 
fastcgi_param  QUERY_STRING       $query_string; 
fastcgi_param  REQUEST_METHOD     $request_method; 
fastcgi_param  CONTENT_TYPE       $content_type; 
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  REQUEST_URI        $request_uri; 
fastcgi_param  DOCUMENT_URI       $document_uri; 
fastcgi_param  DOCUMENT_ROOT      $document_root; 
fastcgi_param  SERVER_PROTOCOL    $server_protocol;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1; 
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr; 
fastcgi_param  REMOTE_PORT        $remote_port; 
fastcgi_param  SERVER_ADDR        $server_addr; 
fastcgi_param  SERVER_PORT        $server_port; 
fastcgi_param  SERVER_NAME        $server_name;

問題がNginxまたはDjangoまたはFastCGIインターフェイスにあることを知りません。誰かが助けてくれることを願っています。

チャーリー

4

0 に答える 0