这是一个非常具体的问题,但一个好的答案也可以让我更好地理解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']
...
疯了。正是我一直在寻找的小时!我可以添加的是脚本获得与PATH_TRANSLATED变量中的请求相对应的物理文件名(无论是CGI还是WSGI)。当你不使用Action时,情况并非如此 –