Как обслуживать не ascii имя файла с помощью django и apache, используя xsendfile

Я хотел обслуживать защищенное содержимое в django, поэтому я попытался установить xsendfile и в django, и в apache. Это работает для имен файлов ascii, но когда я попытался использовать имя файла не ascii, сервер apache ответил 404. Кто-нибудь знает, что здесь происходит?

Django:
def media_xsendfile_pdf(request):
file = Media.objects.last()
response = HttpResponse()
response['Content-Type'] = 'application/pdf'
response['X-Sendfile']= smart_str(f"{settings.BASE_DIR}{file.file.url}")
return response

Apache:
AllowEncodedSlashes On
XSendFile On
XsendFilePath /path-to-the-protected-resource

Блочная цитата

Я смог найти решение для этого,

В заголовке ответа нужно установить X-sendfile, как показано ниже

from urllib.parse import unquote
response["X-sendfile"] = unquote(<url>).encode('utf-8')

Надеюсь, вышесказанное окажется полезным для тех, кто застрял с этим.

Вернуться на верх