【问题标题】:Apache: dynamically interpret static filesApache:动态解释静态文件
【发布时间】:2012-11-30 20:14:30
【问题描述】:

这是一个非常具体的问题,但一个好的答案也可能让我更好地了解 Apache 请求处理。

我有一个 python 脚本来生成一个 HTML 页面。该脚本通过以下 apache 配置项调用:

 WSGIScriptAliasMatch ^.*\.mako$ /usr/local/lib/cgi-bin/myscript.py

但我宁愿使用.mako 文件,就像.php 文件常用的方式一样。也就是说,对于匹配^.*\.mako$ 的请求,仅当服务器上有一个文件时才应调用该脚本,如果配置项不存在,则该文件将由 apache 本身提供服务。 我还会在 python 脚本中访问该文件。

这可能吗?我不想使用丑陋的技巧尝试从请求 URI 中推断出 python 脚本中的文件名(实际上是通过 wsgi 处理的)。

更新:

感谢您提供非常好的解决方案!我想我会发布我的最终设置,因为似乎很多人都在寻找类似灵活的东西。我想要的是一个非常混合的环境,也就是说,我希望在同一个目录中拥有静态和动态内容以方便编辑。此外,我们必须能够以透明的方式访问动态内容。例如。请求http://someserver/file.html,但没有物理/var/www/file.html文件,则使用现有/var/www/file.html.mako动态生成。

apache.conf:

# Disable MultiViews, it will get in your way!

# if resource.html doesn't exist, but resource.html.mako does,
# then use that
RewriteCond ${REQUEST_FILENAME} !-f
RewriteCond ${REQUEST_FILENAME}.mako -f
RewriteRule (.*\.html) $1.mako

# Make .mako files dynamically interpreted by /usr/.../mako-handler.py
AddHandler x-application/mako-template .mako
Action     x-application/mako-template /mako-handler
WSGIScriptAlias /mako-handler /usr/.../mako-handler.py

mako-handler.py:

...
physical_template_filepath = environ['PATH_TRANSLATED']
...

【问题讨论】:

    标签: python apache wsgi


    【解决方案1】:

    尝试使用:

    AddHandler x-application/mako-template .mako
    Action x-application/mako-template /mako-handler
    WSGIScriptAlias /mako-handler /usr/local/lib/cgi-bin/myscript.py
    

    顺序是.mako 扩展名将映射到'x-application/mako-template' 的mime 类型。然后将该 MIME 类型映射到 URL“/mako-handler”,然后将该 URL 映射到 WSGI 脚本。

    【讨论】:

    • 疯了。正是我一直在寻找的几个小时!我可以补充的是,脚本在PATH_TRANSLATED 变量中获取与请求相对应的物理文件名(无论是CGI 还是WSGI)。当您不使用 Action 时,情况并非如此
    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 2015-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 2011-08-06
    相关资源
    最近更新 更多