2009-05-19 8 views
11

pythonを使用して、ウェブデザインに真新しい。 Apacheを稼働させて、pythonスクリプトをcgi-binディレクトリでテストします。 URLを明示的に入力すると有効な結果が得られます: ".../cgi-bin/showenv.py"URLから「cgi-bin」、「.py」などを非表示にするにはどうすればよいですか?

しかし、私はそのように見えたくありません。ここでstackoverflowで、私のアドレスバーに表示されるURLは、それらを実行するために使用されたスクリプトを示す厄介な詳細を決して持っていません。彼らはcgi-bin、.pyなどの拡張機能をきれいにしています。それ、どうやったら出来るの?

編集:返信いただきありがとうございました。今はURLリライティングを行っています。ドキュメントの例は、私が実際にやりたいことに非常に近いと思われます。しかし、私はPythonにコミットしているので、WSGIを見ていく必要があります。

+1

..この質問がserverfault.comに適しているのだろうか? (実際にはApacheを設定しているからです) –

+0

3年間の更新:WSGIの値を見るのにはほとんど時間がかかりませんでしたし、(数週間)フレームワークの値がDjangoに入りました。最初から始めて、私は難しいことをすべて学ばなければなりませんでしたが、あなたが似たような道を旅しているなら、Djangoはあなたが終わるところです。 –

答えて

13

Webアプリケーションを作成するPythonの方法は、cgi-binではありません。 WSGIを使用しています。

WSGIは、WebサーバーとPython Webアプリケーションまたはフレームワーク間の標準インターフェイスです。 PEP 0333で定義されています。

CGIの代わりにそれを使用する際の不利な点はありません。そして、あなたは多くを得るでしょう。美しいURLは簡単に行える素敵なものの1つです。

また、WSGIアプリケーションを記述することは、WSGIインターフェイスをサポートする任意のWebサーバーに展開できることを意味します。 Apacheはmod_wsgiを使ってそうします。

あなたはそのようにApacheでそれを設定できます。

WSGIScriptAlias /myapp /usr/local/www/wsgi-scripts/myapp.py 

その後http://myserver.domain/myapp上のすべての要求がhttp://myserver.domain/myapp/something/here含め、myapp.pyのapplication呼び出し可能になります。

myapp.py

def application(environ, start_response): 
    start_response('200 OK', [('Content-type', 'text/plain')]) 
    return ['Hello World!'] 
+1

+1(もし可能であれば)。 Python Web開発を「最初から」理解したい場合は、CGIを完全に無視する必要があります。あなた自身の裸のWSGIアプリケーションを書くことは本当に簡単で、Pythonフレームワークがあなたのためにラップしているものを手に入れる良い方法です。 –

5

私は、Apacheの設定でURLを書き換えることでこれを行うことができると思います。 hereを書き換えるためのApacheのドキュメントを見ることができます。

4

ちょうど例えば、いくつかの良いWebフレームワークを使用して見つけることを願ってジャンゴと、テンプレート、デシベルのORMなど

+0

これは必ずしも良い考えではありません。 あなたが本当に習慣的なものを作っているのであれば、あなたが選んだフレームワークの枠と規則によって常に拘束されます。 –

+0

はい、そうですが、自分自身のWebフレームワークを開発したいのかどうかわかりません –

+3

フレームワークを使用すると、cgi-binを囲んだ独自のフレームワークを発明するよりもはるかに幸せです。 –

4

これは私がそのようなことを達成するために使用した.htaccessからの抜粋であるあなたがたURLよりも、このようなURLの 以上を持つことができますが、より良いインフラを持っていますが、これは例えば、すべての要求をリダイレクトそのファイルへのindex.phpには含まれていませんでした。もちろん、リダイレクト先のファイル内のサーバー変数を調べて、要求されたものを確認する必要があります。

または、書き換えルールを作成するだけで、いつどこで何を書き換えるかを決定するのに、^.*\/cgi-bin\/.*\.py$のようなRegExpを使用することができます。このようなRegExpは、必要に応じて書き換えが行われるように、細心の注意を払って作成する必要があります。

<IfModule mod_rewrite.c> 
    RewriteEngine On #activate rewriting 
    RewriteBase/ #url base for rewriting 
    RewriteCond %{REQUEST_FILENAME} !index.php #requested file is not index.php 
    RewriteCond %{REQUEST_FILENAME} !^.*\.gif$ #requested file is no .gif 
    RewriteCond %{REQUEST_FILENAME} !^.*\.jpg$ #requested file is no .jpg 
    RewriteCond %{REQUEST_FILENAME} !-d  #is not a directory 
    RewriteRule . /index.php [L]    #send it all to index.php 
</IfModule> 

上記例書き換える(.GIF年代、.JPEG年代とのindex.phpを除く)時を決定するためにRewriteCond itionsを使用します。

ええと、すでに長いテキストがあります。少し役立つと思っていますが、Apache RewriteEngineの構文を習得することは避けられません。

3

あなたはScriptAliasディレクティブは役に立ち見つけることができます。

ScriptAlias /urlpath /your/cgi-bin/script.py 

http://yourserver/urlpathでスクリプトにアクセスできます。

最後に私が使用したときでも、を調べるといいかもしれませんが、WSGIはライブラリ内の「第二級市民」のようなものでした。ドメイン全体にサービスを提供するそれ以外の場合は、WSGIアプリケーションを実行するための指示はありません。

+0

これは私のために働いていません – Harsha

+0

Apache 2.4で 'mod_python'で動作します。クール。 – TranslucentCloud