我正在用Django项目设置Nginx配置。
为了提供一些静态文件,而网址上没有显示/static/
,
我在Nginx配置中添加了一些重写规则。
这是我的Nginx配置的一部分:
location /static/ {
location ~* \.(png|jpg|jpeg|gif|css|js)$ {
access_log off;
expires 30d;
}
alias /path/to/myproject/static/;
}
location ~ ^/favicon.ico$ {
rewrite ^/favicon.ico$ /static/favicon.ico;
}
location /foo/ {
rewrite ^/foo/(.*)$ /static/abc/$1;
}
location /bar/ {
rewrite ^/bar/(.*)$ /static/bar/$1;
}
location / {
fastcgi_pass myproject;
include django_fastcgi_params;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
当我访问https://myproject.com/foo时,它将显示Django的404页。我认为这是因为Nginx中没有匹配的位置(应该以斜杠/
结尾),而Django的urls.py
中没有匹配的URL。
当我访问https://myproject.com/foo/时,它将在index.html
文件夹下显示myproject/static/foo/
,如果没有index.html
,它将显示为403 Forbidden。
但是我发现...
当我访问https://myproject.com/foo/abc时,它将301永久移动到https://myproject.com/static/foo/abc/
当我访问https://myproject.com/foo/abc/时,它将直接显示https://myproject.com/foo/abc/,它是index.html
下的myproject/static/abc/
文件
为什么这两个URL的工作方式不同?
我应该做些修改吗?
答案 0 :(得分:0)
在django项目的APPEND_SLASH=False
中修改settings.py
设置。有关更多信息,请参见-https://docs.djangoproject.com/en/2.2/ref/settings/#append-slash