我有我的 django 由 apache 使用 Vhost 服务。conf文件如下
WSGIPythonPath /srv/www/myproject/testproject/
<VirtualHost *:80>
ServerAdmin admin@betarhombus.com
ServerName www.betarhombus.com
WSGIScriptAlias / /srv/www/testproject/testproject/testproject/wsgi.py
<Directory /srv/www/testproject/testproject/testproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static/ /srv/www/testproject/testproject/static/
Alias /media/ /srv/www/testproject/testproject/media/
<Directory /srv/www/testproject/testproject/static>
Require all granted
</Directory>
<Directory /srv/www/testproject/testproject/media>
Require all granted
</Directory>
</VirtualHost>
我想将媒体文件限制为仅在特定登录用户上提供。所以我遇到了 XsendFile。如果我理解正确,当您让 django 对您要提供的媒体文件进行所有检查时,它的作用是由 Apache 作为静态文件提供。所以如果我猜对了,程序如下
- 激活 XsendFile。
- 创建检查媒体文件权限等的视图并提供服务
- 与 urls.py 文件中的 url 关联
然后我可以使用 ` 并且会像使用初始媒体文件 url 一样正常工作。我理解正确吗?我的问题如下:
关于 1.activating XSendFile。这应该在我的 Vhost 标签内的 conf 文件中完成吗?设置 XsendFile 是否足够?我应该删除媒体指令的别名以及媒体文件的部分吗?我希望媒体文件仅由我的视图提供?
还有什么我应该注意的吗?
编辑:我的设置是
<VirtualHost *:80>
ServerAdmin admin@betarhombus.com
ServerName www.betarhombus.com
WSGIScriptAlias / /srv/www/testproject/testproject/testproject/wsgi.py
XSendFile On
XsendFilePath /srv/www/testproject/testproject/media/
<Directory /srv/www/testproject/testproject/testproject>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static/ /srv/www/testproject/testproject/static/
<Directory /srv/www/testproject/testproject/static>
Require all granted
</Directory>
</VirtualHost>
我的网址.py
#for xsendmedia file serving
url(r'^media\/(?P<path>.*)$', 'customer.views.media_xsendfile'),
和我的看法
def media_xsendfile(request, path):
#here will be checked if user can access media
response = HttpResponse()
response['Content-Type']=''
response['X-Sendfile']= smart_str(os.path.join(settings.MEDIA_ROOT, path))
return response
我的问题是某些媒体文件可以正常共享,而有些则不能正常共享,并出现内部服务器错误