2015-12-07 13 views
9

Tôi có một máy chủ trang web dựa trên python (cherrypy) và tôi cần một số trợ giúp. Tôi xin lỗi trước nếu câu hỏi này quá cơ bản. Tôi không có nhiều kinh nghiệm trong lĩnh vực này cho đến nay.URL tĩnh trong cherrypy

Trang chính của tôi là trên http://host:9090/home/static/index.html. Tôi muốn viết lại địa chỉ ở trên và xác định địa chỉ sau làm trang chính: http://host:9090/home/. Bản thân mã giả sử ở cùng một chỗ. Tôi chỉ muốn một liên kết ngắn hơn để /home/static/index.html cũng sẽ có sẵn trong /home/.

URL viết lại là những gì tôi cần? Nếu như vậy, tôi đã tìm thấy các liên kết sau, nhưng tiếc là tôi không biết làm thế nào để thực hiện nó trong mã của tôi: http://www.aminus.org/blogs/index.php/2005/10/27/url_rewriting_in_cherrypy_2_1?blog=2

cherrypy.config.update({ 
          'server.socket_port': 9090, 
          'server.socket_host': '0.0.0.0' 
          }) 
    conf = { 
     '/': { 
       'tools.sessions.on': True, 
       'tools.staticdir.root': os.path.abspath(os.getcwd()) 
      }, 
     '/static': { 
       'tools.staticdir.on': True, 
       'tools.staticdir.dir': './static/html' 
      }, 
     '/js': { 
       'tools.staticdir.on': True, 
       'tools.staticdir.dir': './static/js' 
      }, 
     '/css': { 
       'tools.staticdir.on': True, 
       'tools.staticdir.dir': './static/css' 
      }, 
     '/img': { 
       'tools.staticdir.on': True, 
       'tools.staticdir.dir': './static/img' 
      }, 
     '/fonts': { 
       'tools.staticdir.on': True, 
       'tools.staticdir.dir': './static/fonts' 
     } 

    } 

    class Root(object): 
     def __init__(self, target): 
      self.target_server = target 

    webapp = Root(args.target) 
    cherrypy.quickstart(webapp, '/home', conf) 

Bất cứ ai có thể giúp đỡ?

+0

@qarma Như tôi đã đề cập ở trên, tôi cần phải viết lại URL. – Omri

Trả lời

2

Trong các dự án của tôi, tôi thường trỏ trực tiếp '/' vào thư mục tĩnh. Tôi muốn bỏ qua tất cả các lần xuất hiện của 'static' trong các URL của tôi, và đó là một cách hay để phân phát tài nguyên chỉ thông qua một URL chính xác. Dù sao, nó có thể là một giải pháp đơn giản để viết thủ công ánh xạ, nếu cùng một tài nguyên tĩnh phải được phân phát qua các URL khác nhau.

Ví dụ, cấu trúc thư mục trông như sau:

repo \ 
    __init__.py 
    main.py 
    static \ 
     test \ 
      some-module.js 

Đó là tiện dụng để có đường dẫn đến thư mục gốc như là một biến toàn cầu, ở đây tôi gọi nó là SITE_ROOT.

SITE_ROOT = '/home/user/repo' 
conf = { 
    '/': { 
     'tools.staticdir.root': os.path.join(SITE_ROOT, 'static') 
    }, 
    '/test': { 
     'tools.staticdir.on': True, 
     'tools.staticdir.dir': 'test' 
    }, 
    '/static/test': { 
     'tools.staticdir.on': True, 
     'tools.staticdir.dir': 'test' 
    }, 
} 

Bây giờ cả hai URL đều dẫn đến cùng một tài nguyên tĩnh, mà không cần chuyển hướng.

http://127.0.0.1:8080/test/some-module.js 
http://127.0.0.1:8080/static/test/some-module.js 

Đọc thêm:

https://cherrypy.readthedocs.org/en/3.3.0/progguide/files/static.html#forming-urls