2012-04-02 164 views
9

我想在共享主機環境中運行Python CGI。我跟着瓶的例子,用一個小應用程序,下面傳來:Flask中的路徑路由

from flask import Flask 
app = Flask(__name__) 

@app.route("/") 
def hello(): 
    return "Hello World!" 

@app.route("/pi") 
def pi(): 
    return "3.1416" 

if __name__ == "__main__": 
    app.run() 

.htaccess包含:

Options +ExecCGI 
AddHandler cgi-script .cgi .py .rb 
DirectoryIndex index.cgi index.htm 

而且我index.cgi

#!/usr/bin/env python 
from wsgiref.handlers import CGIHandler 
from firstflask import app 

CGIHandler().run(app) 

它的路徑/成功映射到index(),但它無法將路徑/pi映射到pi(),而是將re發生404錯誤。我想我錯過了一些明顯的東西。謝謝您的幫助。

+0

這是Apache嗎?我認爲添加一個Apache標籤可能會給你更多的答案,因爲這似乎更像是一個Web服務器配置問題。 – six8 2012-04-03 00:46:45

+0

你的主機只支持CGI,還是支持mod_python或mod_wsgi?這些都是更好的選擇。 – six8 2012-04-03 00:53:44

+0

Cixate,你是對的,這是與Apache。我是python web-frameworks的新手。 cgi設置似乎比mod-wsgi設置更快。這就是我選擇cgi的原因。另一件事,我懷疑它可能需要url重寫。但是因爲我沒有看到文檔中提到的任何url-rewrite,所以我認爲沒有必要。謝謝 – sdc 2012-04-03 02:37:52

回答

2

有關cgi與wsgi的評論是有效的,但是如果您真的想要使用cgi setup,則需要一些重寫規則才能使用index.cgi捕獲除「/」之外的URL。用你的設置你基本上說索引文件是index.cgi,但是如果路徑中有其他東西,index.cgi不會被執行。這就是爲什麼你得到404找不到/ pi請求。

您可以通過請求url /index.cgi/pi來訪問pi()函數,它會成功呈現給您3.1416,但顯然這不是一個很好的URL。這給出了需要配置重寫的提示:使用/ to /index.cgi/重寫所有請求。這與原配置一起提供了非常簡單的重寫規則:

Options +ExecCGI 
AddHandler cgi-script .cgi .py .rb 
DirectoryIndex index.cgi index.htm 

RewriteEngine On 
RewriteRule ^index.cgi/(.*)$ - [S=1] 
RewriteRule ^(.*)$ index.cgi/$1 [QSA,L] 
0

不確定上述解決方案是否解決了查詢。

我覺得.htaccess文件需要是這樣的:

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ /path/to/the/application.cgi/$1 [L] 

它將與這很好地工作。我已經用我的代碼進行了測試。

參考 - here