有没有办法让mod_wsgi / Flask和mod_dav共存?

杰罗德

我正在一个网站上工作,该网站基本上是一堆数据的文件存储库。

我需要人们能够遍历目录并通过WebDAV及其浏览器(即mod_autoindex)下载文件。

仅使用mod_autoindex和mod_dav可以正常工作。但是我想使用Flask-AutoIndex插件,使用mod_wsgi / Flask来定制和提供目录列表页面,而不是相当不灵活的mod_autoindex。

问题在于,这似乎会干扰DAV请求。我得到一个The URL contains extraneous path components. The resource could not be identified.错误,当我尝试用DAV客户端连接。

有没有一种方法可以使mod_wsgi忽略具有WebDAV特定标头的所有请求,以便可以由mod_dav正确处理?

编辑:

这是我的Apache配置:

LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so DavLockDB "/var/lib/urs_test/dav/DavLock" LoadModule wsgi_module modules/mod_wsgi.so WSGIScriptAlias / /urs_test/webdav_info /usr/local/apache2/htdocs/urs_test/app.wsgi WSGIDaemonProcess test processes=2 threads=15 WSGIProcessGroup test

<Directory /usr/local/apache2/htdocs/urs_test> AuthType UrsOAuth2 require valid-user Dav On Options +ExecCGI AddHandler cgi-script .cgi .pl </Directory>

另一个编辑:

所以我想我已经弄清楚这里发生了什么。它与WSGIScriptAlias标记有关,该标记将附加到请求路径。

的WebDAV请求在到达mod_dav时/urs_test/files被修改为/usr/local/apache2/htdocs/urs_test/app.wsgi/files

因此,我需要找出一种选择性地将别名指令应用于某些HTTP方法(即PROPFIND)而不应用于其他HTTP方法(即GET)的方法。

杰罗德

过了一会儿再回到这个问题,我发现了一些似乎可行的方法。

基本上,我使用mod_rewrite重定向我不希望mod_wsgi / Flask处理的请求。

因此,如果我的Flask应用程序在下提供/endpoint,并且我希望WebDAV存储库在下提供/endpoint/dav,则我的配置是:

RewriteCond %{REQUEST_URI} ^/endpoint/dav
RewriteCond %{REQUEST_METHOD} ^(PROPFIND|OPTIONS|PROPPATCH)$
RewriteRule ^/endpoint/dav /local_path_to_dav_repo/$1 [L]

RewriteCond %{REQUEST_URI} ^/endpoint/dav
RewriteCond %{REQUEST_METHOD} =GET
RewriteCond /local_path_to_dav_repo/$1 !-d
RewriteRule ^/endpoint/dav(.*) /local_path_to_dav_repo/$1 [L]

WSGIScriptAlias /endpoint /my_wsgi_dir/flask.wsgi

<Directory /local_path_to_dav_repo>
Dav On
</Directory>

前3行捕获任何DAV特定的方法(目前为只读方法),并将其重定向到DAV存储库的本地路径。由于mod_wsgi仅获取/endpointURI请求,因此该请求永远不会到达Flask并直接转到mod_dav

接下来的4行捕获GET对特定文件的任何请求,并将它们重定向到本地文件系统中该文件的特定位置。再一次,此请求不会到达Flask。据我了解,Apache直接提供文件的速度要比Flask进行的更快。

因此,结果是只有GETDAV存储库中的目录请求才到达该目录mod_wsgi,因此我可以构建一个外观漂亮的目录索引并通过Flask服务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

mod_wsgi:ImportError:没有名为“ encodings”的模块

来自分类Dev

具有virtualenv和mod_wsgi的Apache:ImportError:没有名为“ django”的模块

来自分类Dev

flask_sqlalchemy在mod_wsgi下“没有这样的表”

来自分类Dev

有没有办法同时绑定和呼叫?

来自分类Dev

有没有办法使用JS和ASP

来自分类Dev

有没有办法混合 CSS 和 PHP?

来自分类Dev

我的virtualenv没有考虑在内吗?[Apache,mod_wsgi和django]

来自分类Dev

带有mod_wsgi和gzip的Django

来自分类Dev

mod_wsgi和uwsgi有什么区别?

来自分类Dev

使用mod_wsgi为Django配置Apache 2-没有httpd.conf文件

来自分类Dev

Debian mod_wsgi:没有名为'psycopg2._psycopg'的模块

来自分类Dev

WSGIDaemon进程语法错误-Mod_wsgi django ImportError:没有名为django.core.wsgi的模块

来自分类Dev

带有 mod_wsgi 模块的 Django apache 配置

来自分类Dev

有没有办法在光滑的轮播中同时具有slidesToScroll和swipeToScroll行为?

来自分类Dev

有没有办法同时拥有选择命令和计时器?

来自分类Dev

有没有办法确定我的系统拥有和使用的PCIe通道数量

来自分类Dev

有没有办法只导入带有 0 和 1 的 MNIST 图像?

来自分类Dev

有没有办法将Flask中的HTML代码作为字符串传递?

来自分类Dev

在 Flask 中,有没有办法在每次查看之前运行一些代码?

来自分类Dev

有没有办法使用 mss 和 pytesseract witchout 保存和打开?

来自分类Dev

有没有办法删除字符串中重复的和连续的单词/短语?

来自分类Dev

有没有办法防止单元测试和测试的类之间的耦合

来自分类Dev

有没有办法以编程方式导出/保存生成的javascript和css包?

来自分类Dev

Javascript和SVG。有没有办法检测是否呈现了文本?

来自分类Dev

有没有办法在Lucene中结合使用MultiFieldQuery和NumericRanges?

来自分类Dev

有没有办法使用独立的`std :: begin`和const_iterator?

来自分类Dev

有没有办法在GVM中设置默认的Groovy和Grails版本?

来自分类Dev

有没有办法限制Node(Express)中的速度和响应时间?

来自分类Dev

有没有办法在Dancer和Starman中使用包/全局变量?

Related 相关文章

  1. 1

    mod_wsgi:ImportError:没有名为“ encodings”的模块

  2. 2

    具有virtualenv和mod_wsgi的Apache:ImportError:没有名为“ django”的模块

  3. 3

    flask_sqlalchemy在mod_wsgi下“没有这样的表”

  4. 4

    有没有办法同时绑定和呼叫?

  5. 5

    有没有办法使用JS和ASP

  6. 6

    有没有办法混合 CSS 和 PHP?

  7. 7

    我的virtualenv没有考虑在内吗?[Apache,mod_wsgi和django]

  8. 8

    带有mod_wsgi和gzip的Django

  9. 9

    mod_wsgi和uwsgi有什么区别?

  10. 10

    使用mod_wsgi为Django配置Apache 2-没有httpd.conf文件

  11. 11

    Debian mod_wsgi:没有名为'psycopg2._psycopg'的模块

  12. 12

    WSGIDaemon进程语法错误-Mod_wsgi django ImportError:没有名为django.core.wsgi的模块

  13. 13

    带有 mod_wsgi 模块的 Django apache 配置

  14. 14

    有没有办法在光滑的轮播中同时具有slidesToScroll和swipeToScroll行为?

  15. 15

    有没有办法同时拥有选择命令和计时器?

  16. 16

    有没有办法确定我的系统拥有和使用的PCIe通道数量

  17. 17

    有没有办法只导入带有 0 和 1 的 MNIST 图像?

  18. 18

    有没有办法将Flask中的HTML代码作为字符串传递?

  19. 19

    在 Flask 中,有没有办法在每次查看之前运行一些代码?

  20. 20

    有没有办法使用 mss 和 pytesseract witchout 保存和打开?

  21. 21

    有没有办法删除字符串中重复的和连续的单词/短语?

  22. 22

    有没有办法防止单元测试和测试的类之间的耦合

  23. 23

    有没有办法以编程方式导出/保存生成的javascript和css包?

  24. 24

    Javascript和SVG。有没有办法检测是否呈现了文本?

  25. 25

    有没有办法在Lucene中结合使用MultiFieldQuery和NumericRanges?

  26. 26

    有没有办法使用独立的`std :: begin`和const_iterator?

  27. 27

    有没有办法在GVM中设置默认的Groovy和Grails版本?

  28. 28

    有没有办法限制Node(Express)中的速度和响应时间?

  29. 29

    有没有办法在Dancer和Starman中使用包/全局变量?

热门标签

归档