2012-04-02 115 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