django静态文件放在根目录,如何访问?比如微信业务域名验证文件
最后修改:2021-04-25 09:01:22
【原创技术日志】下的所有文章,都由昆明网成信息产业有限公司开发人员在工作中撰写,转载请注明来源于http://www.oneso.com/cms/document/detail/id/3.html
遇到一个问题,网站要接入微信公众平台,设置域名为业务域名时,微信需要验证域名,要求上传验证文件到服务器根目录。
而网站使用django,网址都被django接管,无法直接访问,也就无法验证通过。
看似简单的问题,却不是那么好处理。
首先看django的文档,没有找到解决方案。
百度一下,有人说用重写,(Apache用 alias | Ningx用rewrite)。虽然可行,但不完美,有多个文件或每次有新文件需要验证,难道也要写一句重写指令?
又有人说用下面的方法
这哥们的第一个方法,看了就知道,是可行,但也是不完美,每次要改django 的urls文件,还要写视图方法。
第二个方法,看起来是用模板类的as_view方法直接显示文件内容,也是每次要改django 的urls文件。试了一下,不成功,也不想多研究了。
以上方法都有一个毛病,不能一劳永逸解决问题。
最后自己琢磨出一个办法,终于可以一劳永逸解决问题。供大家参考。
我们的方法就是用nginx的location指示。
原理就是不要把.txt这样需要直接显示的文件委托/反向代理给django来处理。
以下是我们的nginx配置:
location ~ ^(?!(/static/|/upload/|/hls/|.+\.(txt|html|htm|jpg|png|gif))) { #这里是一些配置 proxy_pass http://daphne;#反向代理 }
上面这段配置意思就是:
/static/、/upload/、/hls/ 这三个目录,和 以(txt、html、htm、jpg、png、gif)为后缀的文件,都不要委托给django。也就是除了这几个目录和这几个后缀的文件,其他的都交由django处理。
我们的django运行在 daphne下。
这样,上传任何
以(txt、html、htm、jpg、png、gif)为后缀的文件,nginx就直接显示了。
这才是完美的解决方案。此处应该有掌声!
关于 django静态文件放在根目录,如何访问?比如微信业务域名验证文件
3842 次阅读 |
1306 天前 |