2012-11-30 73 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時,情況並非如此 –