6

Python SimpleHTTPServerがmod_rewriteをサポートするようにする方法はありますか?

私はロケーションAPIとしてHistoryAPIを利用してEmber.jsで物事を試していますが、それを機能させるには、次のことを行う必要があります。

1) add some vhosts config in WAMP (not simple), or
2) run python -m simpleHTTPServer (very simple)

そのため、ブラウザで開いてlocalhost:3000ナビゲーションをクリックすると(たとえば、ユーザーについて)、うまく機能しました。URLはEmber.jsによってそれぞれとに変更されlocalhost:3000/aboutますlocalhost:3000/users

しかし、新しいタブで直接開こうとするとlocalhost:3000/about、PythonWebサーバーは単に404を返します。

.htaccessですべてをindex.htmlにリダイレクトしましたが、Pythonの単純なWebサーバーが実際にhtaccessファイルを読み取っていないのではないかと思います(これで正しいですか?)

PHP 5.4.12をダウンロードして、組み込みのWebサーバーを実行してみましたが、urlとhtaccessmod_rewriteが適切に機能します。しかし、私はまだ安定した5.3から(おそらくまだ十分に不安定な)5.4.12にアップグレードすることに消極的です。したがって、Pythonの単純なWebサーバーでmod_rewriteをサポートする方法がある場合は、それが望ましいでしょう。

答えてくれてありがとう。

4

4 に答える 4

7

リダイレクトが必要なケースがわかっている場合は、 SimpleHTTPRequestHandlerをサブクラス化してリダイレクトを行うことができます。これにより、不足しているファイル リクエストが/index.htmlにリダイレクトされます。

import SimpleHTTPServer, SocketServer
import urlparse, os

PORT = 3000

class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
   def do_GET(self):

       # Parse query data to find out what was requested
       parsedParams = urlparse.urlparse(self.path)

       # See if the file requested exists
       if os.access('.' + os.sep + parsedParams.path, os.R_OK):
          # File exists, serve it up
          SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self);
       else:
          # redirect to index.html
          self.send_response(302)
          self.send_header('Content-Type', 'text/html')  
          self.send_header('location', '/index.html')  
          self.end_headers()

Handler = MyHandler

httpd = SocketServer.TCPServer(("", PORT), Handler)

print "serving at port", PORT
httpd.serve_forever()
于 2013-03-15T01:25:04.510 に答える
7

SimpleHTTPServerは apache モジュールをサポートせず、.htaccess は apache ではないため、尊重しません。php でも動作しません。

于 2013-03-14T05:33:08.063 に答える
2

残念ながら Python サーバーには mod_rewrite はありません。Apache サーバーの背後で Python スクリプトを実行しない限り、リソースを消費するソリューションです。

Cherrypy ( http://www.cherrypy.org/ ) を試してみてください。ページ ハンドラーを管理でき、クリーンな URL を非常に簡単に作成できます。

于 2013-04-03T02:26:47.830 に答える