Я написал приложение на сайте, чтобы загружать и обслуживать медиафайлы (зарегистрированным пользователям).
На самом деле, файлы обслуживаются nginx, используя заголовок x-accel-redirect.
Когда браузер пытается загрузить, например, http://127.0.0.1:8000/mediacontent/files/abc.pdf
он возвращает HTTP301 в "abc.pdf /", но если файл содержит буквы кириллицы, например, "/файл.pdf", все в порядке, браузер получает файл!
Почему ADD_SLASHES добавляет / к обычному URL ASCII, в то время как он соответствует шаблону?
Сайт также основан на django-cms, если это имеет значение.
urls.py:
(r'^mediacontent/', include('mediacontent.urls')),
Медиаконтент / urls.py:
url(r'^files/(?P<path>.*)$', login_required(serve_mediacontent), name="serve"),
views.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