Estoy usando mod_xsendfile (v0.12) para servir archivos estáticos donde Django controla el acceso a los archivos según los usuarios y permisos.XSendFile no servirá los archivos en Apache 2.2
En mi archivo de configuración, que tengo:
XSendFile On
XSendFilePath e:/documents/
<Directory e:/Documents>
Order allow,deny
Allow from all
</Directory>
En mi código de Django, que establezca las cabeceras de este modo:
assert(isinstance(filename, FieldFile))
xsendfile = filename.name
if(platform.system() == 'Windows'):
xsendfile = xsendfile.replace('\\', '/')
response = HttpResponse()
response['X-Sendfile'] = xsendfile
mimetype = mimetypes.guess_type(xsendfile)[0]
response['Content-Type'] = mimetype
response['Content-Length'] = filename.size
Y en mi archivo de registro me sale:
[Fri Oct 22 08:54:22 2010] [error] [client 192.168.20.34] (20023)The given path
was above the root path: xsendfile: unable to find file:
e:/Documents/3/2010-10-20/TestDocument.pdf
En esta versión de mod_xsendfile
,
XSendFileAllowAbove On
genera el error:
Invalid command 'XSendFileAllowAbove', perhaps misspelled or defined by a module
not included in the server configuration
supuse que era porque se han añadido al XSendFilePath
lista blanca. ¿Alguien más consiguió que esto funcione?
Otra cosa que descubrí en todo esto es que toda la ruta distingue entre mayúsculas y minúsculas, incluso si está en Windows.Si hubiera estado en Linux, eso se me habría ocurrido de inmediato, pero en Windows descarté esos problemas. ¡La LETRA DE CONDUCCIÓN DEBE SER MAYÚSCULA! – boatcoder