我在网站上编写了一个应用程序,用于上传和提供媒体文件(给注册用户)。实际上,文件由 nginx 提供,使用 x-accel-redirect 标头。
当浏览器尝试下载例如http://127.0.0.1:8000/mediacontent/files/abc.pdf 时,它会将 HTTP301 转换为“abc.pdf/”,但如果文件包含西里尔字母,例如“/файл.pdf”,则所有内容没问题,浏览器获取文件!
为什么 ADD_SLASHES 添加 / 到纯 ASCII URL,而它匹配模式?
网站也基于 django-cms,如果有区别的话。
网址.py:
(r'^mediacontent/', include('mediacontent.urls')),
媒体内容/urls.py:
url(r'^files/(?P<path>.*)$', login_required(serve_mediacontent), name="serve"),
视图.py:
def serve_mediacontent(request, path):
webserver = getattr(settings, 'WEBSERVER', 'nginx')
if webserver == 'nginx':
response = HttpResponse()
response['Content-Type'] = ""
response['X-Accel-Redirect'] = "/media/files/" + path.encode("utf-8")
return response