将两个 MEDIA_URLs 映射到同一个 MEDIA_ROOT
Mapping two MEDIA_URLs to the same MEDIA_ROOT
我正在将一个网站从 WordPress 迁移到 Django/Wagtail。我的 media
目录中有所有旧的 WP 内容,并且都得到了适当的服务。
为了内容中硬编码的旧媒体 URL,将其他 URL(特别是 /wp-content/
)映射到 MEDIA_ROOT
会很方便。
因此,例如现在在 //example.com/media/uploads/2017/12/IMG_2120.jpg
可用的已迁移资产也可以从 //example.com/wp-content/uploads/2017/12/IMG_2120.jpg
提供
我确定有一些明显的方法可以做到这一点(在 urls.py
?)但完全是空白。
我相信您已经知道 static/media 文件应该使用前端服务器(如 Nginx)来提供,因为文档中的很多地方都提到了这一点。
那么,如果 Django 不提供文件,为什么它需要 MEDIA_ROOT
和 MEDIA_URL
设置?
MEDIA_ROOT
是Django存放你上传的images/files的地方。
MEDIA_URL
被Django用来生成文件urls。例如,如果 MEDIA_URL = '/media/'
,那么如果你做 {{ image.url }}
,Django 将生成这样的 url - /media/image.jpg
.
但 Django 不提供这些文件。您的前端服务器会。所以,你要做的是像这样配置你的前端服务器:
if request path starts with /media/:
map it to <media directory>
基本上,您是在告诉前端服务器为每个以 /media/
开头的请求提供来自 <media directory>
的内容。这样,以 /media/
开头的请求实际上永远不会到达您的 Django 应用程序,因为您的服务器正在处理它们。
我的意思是,您可以配置您的前端服务器以将 /wp-content/uploads/
映射到您的 <media directory>
,它将提供文件。
我正在将一个网站从 WordPress 迁移到 Django/Wagtail。我的 media
目录中有所有旧的 WP 内容,并且都得到了适当的服务。
为了内容中硬编码的旧媒体 URL,将其他 URL(特别是 /wp-content/
)映射到 MEDIA_ROOT
会很方便。
因此,例如现在在 //example.com/media/uploads/2017/12/IMG_2120.jpg
可用的已迁移资产也可以从 //example.com/wp-content/uploads/2017/12/IMG_2120.jpg
我确定有一些明显的方法可以做到这一点(在 urls.py
?)但完全是空白。
我相信您已经知道 static/media 文件应该使用前端服务器(如 Nginx)来提供,因为文档中的很多地方都提到了这一点。
那么,如果 Django 不提供文件,为什么它需要 MEDIA_ROOT
和 MEDIA_URL
设置?
MEDIA_ROOT
是Django存放你上传的images/files的地方。
MEDIA_URL
被Django用来生成文件urls。例如,如果 MEDIA_URL = '/media/'
,那么如果你做 {{ image.url }}
,Django 将生成这样的 url - /media/image.jpg
.
但 Django 不提供这些文件。您的前端服务器会。所以,你要做的是像这样配置你的前端服务器:
if request path starts with /media/:
map it to <media directory>
基本上,您是在告诉前端服务器为每个以 /media/
开头的请求提供来自 <media directory>
的内容。这样,以 /media/
开头的请求实际上永远不会到达您的 Django 应用程序,因为您的服务器正在处理它们。
我的意思是,您可以配置您的前端服务器以将 /wp-content/uploads/
映射到您的 <media directory>
,它将提供文件。