我在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'),
param&#39; q&#39;由qsearch函数捕获的是 u&#39;%E6%9C%B1&#39; 。但是,如果不加引号,它应该是 u&#39; 。
同样的程序可以很好地得到你的帮助。使用runserver进行调试时。 所以我必须使用变通方法:
q = unicode(urllib.unquote(str(q)), 'u8')
Nginx conf:
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接口。希望有人可以提供帮助。
查理