当存在 url 模式时,Django 的 APPEND_SLASH 添加斜杠,但前提是 URL 中没有西里尔字母
我在网站上编写了一个应用程序,用于上传和提供媒体文件(向注册用户)。 实际上,文件由 nginx 使用 x-accel-redirect 标头提供服务。
当浏览器尝试下载例如 http://127.0.0.1:8000/mediacontent/files/abc .pdf 它获取 HTTP301 到“abc.pdf/”,但如果文件包含西里尔字母,例如“/файл.pdf”,一切正常,浏览器获取文件!
为什么 ADD_SLASHES 将 / 添加到纯 ASCII URL,而它匹配模式?
网站也基于 django-cms,如果有区别的话。
urls.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
I wrote an app on site, to upload and serve mediafiles (to registered users).
Actually, files are served by nginx, using x-accel-redirect header.
When browser try to download e.g. http://127.0.0.1:8000/mediacontent/files/abc.pdf
it gets HTTP301 to "abc.pdf/", but if file contains cyrillic letters, e.g. "/файл.pdf", everything is ok, browser gets file!
Why ADD_SLASHES adds / to plain ASCII URL, while it's matches pattern?
Site also based on django-cms, if it makes difference.
urls.py:
(r'^mediacontent/', include('mediacontent.urls')),
mediacontent/urls.py:
url(r'^files/(?P<path>.*)
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
, login_required(serve_mediacontent), name="serve"),
views.py:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论