2012-04-02 6 views
9

共有ホスティング環境でPython CGIを実行したい。私は、フラスコの例を踏襲し、以下のように小さなアプリケーションを思い付いた:Flaskのパスルーティング

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) 

です:

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が含まれていますindex()ただし、/pipi()にマップするのに失敗しました。 404エラーが発生しました。私は何かが明らかに欠けていると思う。助けてくれてありがとう。

+0

これはApacheでですか?私は、Apacheのタグを追加すると、Webサーバーの設定上の問題のように思われるので、より多くの回答を得る可能性が高いと思います。 – six8

+0

あなたのホストはCGIのみをサポートしているのですか、それともmod_pythonやmod_wsgiをサポートしていますか?それらははるかに良いオプションです。 – six8

+0

Cixate、あなたはこれがApacheにあることは間違いありません。私はPythonのWebフレームワークには新しいです。 CGIの設定は、mod-wsgiよりもセットアップが速いようです。だから私はCGIを選ぶのです。もう1つ、私はそれがURLの書き換えを必要とするかもしれないと思った。しかし、私は文書で言及されたURLの書き換えを見なかったので、私は必要がないと仮定します。ありがとう – sdc

答えて

2

cgiとwsgiについてのコメントは有効ですが、実際にcgi setupを使用するには、index.cgiで「/」以外のURLをキャッチするための書き換えルールが必要です。あなたのセットアップでは、基本的にインデックスファイルがindex.cgiだと言いますが、もしそこに他に何かがある場合は、index.cgiは実行されません。このため、/ piリクエストでは404 Not Foundが表示されます。

url /index.cgi/piを要求することでpi()関数にアクセスすることができます。これにより、3.1416が正常にレンダリングされますが、明らかに非常に優れたURLではありません。これは、書き換えのために何を設定する必要があるのか​​を示唆しています。すべてのリクエストを/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