2013-03-14 9 views
5

Gibt es eine Möglichkeit, Python SimpleHTTPServer mod_rewrite zu unterstützen?Python SimpleHTTPServer

Ich versuche, die Dinge mit Ember.js mit Nutzung History API als Standort-API, und es funktioniert, muss ich:

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

Also, wenn ich es im Browser geöffnet, localhost:3000 und geklickt um die navigation (über und benutzer zum beispiel), es hat gut funktioniert. Die URLs werden von Ember.js in localhost:3000/about bzw. localhost:3000/users geändert.

Aber als ich versuchte, localhost:3000/about direkt in neuen Tab zu öffnen, der Python-Web-Server gibt einfach 404.

ich meine .htaccess musste alles index.html Umleiten, aber ich vermute, Python einfachen Web-Server funktioniert nicht lese wirklich die htaccess-Datei (bin ich richtig?)

Ich habe versucht, PHP 5.4.12 herunterladen und führen Sie den integrierten Webserver, die URL und htaccess mod_rewrite funktioniert gut. Aber ich zögere immer noch, von stabilem 5.3 auf (wahrscheinlich immer noch instabil genug) 5.4.12 zu aktualisieren, also wenn es einen Weg gibt, mod_rewrite in python simple web server zu unterstützen, wäre das vorzuziehen.

Danke für die Antwort.

Antwort

8

SimpleHTTPServer unterstützt keine Apache-Module und respektiert .htaccess nicht, da es sich nicht um Apache handelt. Es wird auch nicht mit PHP funktionieren.

+1

In der Tat, SimpleHTTPServer tut nicht viel mehr als statische Dateien und HTML. – mvanveen

+0

Ja, ich denke auch so. Also sowieso oder ein empfohlener einfacher Webserver, der einfach zu bedienen ist und zumindest mod_rewrite unterstützt? – Henson

+1

Es wäre kein "einfacher" Webserver, wenn er all das unterstützt. – LtWorf

7

Wenn Sie die Fälle kennen, die Sie umleiten müssen, können Sie die Unterklasse SimpleHTTPRequestHandler erstellen und eine Umleitung durchführen. Diese leitet die fehlenden Dateianforderungen an /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() 
2

Keine mod_rewrite in Python-Server Ich habe Angst, wenn Sie Python-Skripte hinter einem Apache-Server laufen, eine ressourcen teure Lösung.

Versuchen Sie Cherrypy (http://www.cherrypy.org/), die Sie Ihre Seitenhandler verwalten können, und sehr einfach saubere URLs erstellt.

7

Indem ich die Antwort von pd40 ändere, kam ich auf diese, die nicht umleitet, es tut Ihr traditionelles "send index.html statt 404". Überhaupt nicht optimiert, aber es funktioniert für Tests und Entwicklung, die alles was ich brauche.

import SimpleHTTPServer, SocketServer 
import urlparse, os 

PORT = 3456 

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: 
      # send index.hmtl 
      self.send_response(200) 
      self.send_header('Content-Type', 'text/html') 
      self.end_headers() 
      with open('index.html', 'r') as fin: 
      self.copyfile(fin, self.wfile) 

Handler = MyHandler 

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

print "serving at port", PORT 
httpd.serve_forever() 
Verwandte Themen