我在 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 接口。希望有人可以提供帮助。
查理