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