fj1*_*23x 8 python .htaccess mod-rewrite http
我的服务器模块(使用http.server.HTTPServer)可以使用类似的 RewriteRule方法将所有流量重定向到单个cgi脚本吗?我希望能够做到这里显示的另一个问题,但对于我的python服务器.
可以使用类似的东西来完成.htaccess,还是有另一种方式?
此外,即使对于简单的localhost开发服务器,这可以做到吗?
我正在通过例如http:// localhost:8000/html/index.html提供开发文件,我想在开发过程中隐藏URL中的/ html子文件夹.
怎么能实现呢?
您可以使用自定义脚本初始化服务器并在其中定义路由,例如本文中建议的:
Python 2:
server.pyRun Code Online (Sandbox Code Playgroud)import os import posixpath import urllib import BaseHTTPServer from SimpleHTTPServer import SimpleHTTPRequestHandler # modify this to add additional routes ROUTES = ( <- this is the "good stuff", make aliases for your paths # [url_prefix , directory_path] ['/media', '/var/www/media'], ['', '/var/www/site'] # empty string for the 'default' match ) class RequestHandler(SimpleHTTPRequestHandler): def translate_path(self, path): """translate path given routes""" # set default root to cwd root = os.getcwd() # look up routes and set root directory accordingly for pattern, rootdir in ROUTES: if path.startswith(pattern): # found match! path = path[len(pattern):] # consume path up to pattern len root = rootdir break # normalize path and prepend root directory path = path.split('?',1)[0] path = path.split('#',1)[0] path = posixpath.normpath(urllib.unquote(path)) words = path.split('/') words = filter(None, words) path = root for word in words: drive, word = os.path.splitdrive(word) head, word = os.path.split(word) if word in (os.curdir, os.pardir): continue path = os.path.join(path, word) return path if __name__ == '__main__': BaseHTTPServer.test(RequestHandler, BaseHTTPServer.HTTPServer)
然后运行你的脚本:
python server.py
Run Code Online (Sandbox Code Playgroud)
Python 3:
在Python 3中BaseHTTPServer,SimpleHTTPServer模块已经合并到http.server模块中.所以你必须修改上面的脚本如下:
改变
import BaseHTTPServer
from SimpleHTTPServer import SimpleHTTPRequestHandler
Run Code Online (Sandbox Code Playgroud)
至
import http.server
Run Code Online (Sandbox Code Playgroud)
(如果你这样做,那么应该将调用修改为http.server.SimpleHTTPRequest等)
要么
from http.server import BaseHTTPServer, SimpleHTTPServer, SimpleHTTPRequestHandler
Run Code Online (Sandbox Code Playgroud)
(使用此选项调用保持与原始脚本相同)
然后运行服务器脚本: python server.py
您应该修改ROUTES变量以满足您的需求.
例如,您要隐藏/html网址中的文件夹:
ROUTES = (
['', '/exact/path/to/folder/html'],
['/another_url_path', '/exact/path/to/another/folder'],
...
)
Run Code Online (Sandbox Code Playgroud)
现在,如果你点击:http://localhost:8000/index.html你将进入你的主页.
注意:
默认情况下,此脚本将为域url中执行的文件夹中的包含文件提供服务(例如,我server.py在Documents文件夹中,然后当我运行它时,http:// localhost:8000 url将服务我的Documents文件夹).
您可以通过路由更改此行为(请参阅代码中的"默认"匹配注释)或将脚本放在项目根文件夹中并从那里开始.
| 归档时间: |
|
| 查看次数: |
1999 次 |
| 最近记录: |