热门标签:
Q:

Python SimpleHTTPServer

有没有办法让Python SimpleHTTPServer支持mod_rewrite?

我在和余烬试试。js利用历史API作为位置API,并使其工作,我必须 :

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

所以当我在浏览器中打开它,localhost:3000并点击导航(例如关于和用户)时,它工作得很好。 网址由Ember更改。js分别为localhost:3000/aboutlocalhost:3000/users

但是当我尝试直接在新选项卡中打开localhost:3000/about时,python web服务器简单地返回404。

我有我的。htaccess将所有内容重定向到索引。html,但我怀疑python简单的web服务器并没有真正读取htaccess文件(我对此是否正确?)

我已经尝试下载PHP5.4.12并运行内置的web服务器,url和htaccess mod_rewrite效果很好。 但是我仍然不愿意从稳定的5.3升级到(可能仍然足够不稳定)5.4.12,所以如果有一种方法可以在python简单的web服务器中支持mod_rewrite,那将是可取的。

谢谢你的回答。

原网址
A:

通过修改pd40的答案,我想出了这个不重定向,它做你的传统"发送索引。html而不是404"。 根本没有优化,但它适用于测试和开发,这是我所需要的。

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()

所有回答

共 3 条

author avatar

SimpleHTTPServer不支持apache模块,也不尊重。htaccess,因为它不是apache。 它也不适用于php。

author avatar

如果你知道你需要重定向的情况,你可以子类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()
author avatar

恐怕在Python服务器中没有mod_rewrite,除非你在Apache服务器后面运行python脚本,这是一个资源昂贵的解决方案。

尝试Cherrypy(http://www.cherrypy.org/),它允许您管理页面处理程序,并且非常简单地制作干净的Url。

相似问题