Apache:动态解释静态文件



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

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

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

但我更愿意像通常使用.php文件那样使用.mako文件。也就是说,对于匹配^.*.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']
...

尝试使用:

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

顺序是.mako扩展将映射到mime类型的"x-application/mako template"。然后将该mime类型映射到URL"/mako处理程序",然后将该URL映射到WSGI脚本。

相关内容

  • 没有找到相关文章

最新更新