这是一个非常具体的问题,但一个好的答案也可能让我更好地理解 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']
...