nginx重写中断django?

我有Django运行在Nginx之后。 其中一个域提供图像文件,如果存在这样的文件,则从本地文件系统上的caching中提取;如果不存在,则用django脚本提供。

要从机器人隐藏真实的文件名我有时想洗牌文件中的字符。 在这种情况下,url有一个“/ x /”前缀。 这是我在nginxconfiguration的尝试:

server { listen 80; server_name mydomain.com; client_max_body_size 5M; access_log /var/log/nginx/mydomain.access.log; location /robots.txt { root /srv/www/mydomain.com; } rewrite ^/x/(.)(.)(.)(.)(.)(.)(.*)$ $5$2$6$3$1$4.jpg last; location ~* ^.+\.(jpeg|gif|png|jpg|webp) { root /srv/imagecache; try_files /$uri @aws; } location @aws { fastcgi_pass unix:/srv/django/myapp/myapp.sock; fastcgi_param SERVER_NAME $server_name; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param PATH_INFO $fastcgi_script_name; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param QUERY_STRING $query_string; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_pass_header Authorization; fastcgi_intercept_errors off; } } 

如果重写规则不匹配,一切正常。 如果重写规则匹配,则只有在文件系统上可以find该文件时才起作用。 Django总是返回404.在其debugging错误页面django说,找不到“mydomain.com/abc123.gif”,其中url是正确重写的。 如果我复制粘贴url在浏览器的地址栏,并尝试加载,它的工作原理。 Django不会调用在urls.py中指定的函数,它甚至在错误页面上甚至没有说urls.py。

为什么? 在重写与常规重写不同之后,请求如何传递给Django?