這是一個非常具體的問題,但一個好的答案也可以讓我更好地理解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時,情況並非如此 –