2012-11-30 27 views
1

这是一个非常具体的问题,但一个好的答案也可以让我更好地理解Apache请求处理。Apache:动态解释静态文件

我有一个python脚本来生成一个HTML页面。脚本由以下Apache配置项的方式叫做:

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

但我宁愿用.mako文件原来的样子.php文件通常使用。这是一个匹配^.*\.mako$的请求,只有在服务器上有一个文件时,才会调用该脚本,如果配置项不在该文件中,该文件将由apache自己提供。 我也可以在python脚本中访问该文件。

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

更新:

感谢您的非常好的解决方案!我想我会发布我的最终设置,因为看起来很多人都在寻找类似灵活的东西。我想要的是一个很混杂的环境,也就是我想要在同一个目录中有静态和动态内容来轻松编辑。此外,我们必须能够以透明的方式访问动态内容。例如。请求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'] 
... 

回答

2

尝试使用:

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类型映射到URL'/ mako-handler',然后将该URL映射到WSGI脚本。

+0

疯了。正是我一直在寻找的小时!我可以添加的是脚本获得与PATH_TRANSLATED变量中的请求相对应的物理文件名(无论是CGI还是WSGI)。当你不使用Action时,情况并非如此 –