2017-09-25 43 views
1

我使用Python和龍捲風網絡服務器。 應用程序工作正常,但我不能找到一種方法來防止用戶在通過URL直接訪問服務器上的文件。 比如我有在服務器中的以下文件:避免直接訪問文件服務器的文件在龍捲風

program.py
的index.html
main.html中

我想防止用戶通過網絡鏈接直接訪問上述服務器文件
例如:本地主機:8080/program.py或/index.html

我只希望他們能訪問本地主機:8080 /或/家庭

在此先感謝

from ws4py.client.tornadoclient import TornadoWebSocketClient 
import tornado.ioloop 
import tornado.web 
import tornado.websocket 
import tornado.template 

SETTING_CLIENT_LISTEN_PORT = 8080 
class MainHandler(tornado.web.RequestHandler): 

    def get(self): 
     try: 
      loader = tornado.template.Loader(".") 
      self.write(loader.load("index.html").generate()) 
     except Exception as e: 
      print("exception occured", e) 

class CWSHandler(tornado.websocket.WebSocketHandler): 
    global waiters 

    def open(self): 
     print('###FUNCTION CWSHandler.open(self) start') 

    def on_close(self): 
     print('###FUNCTION CWSHandler.open(self) close') 

    def on_message(self, message): 
     print('###FUNCTION CWSHandler.on_message msg:', message) 

settings = { 
    "cookie_secret": "bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=", 
    "login_url": "/", 
} 

application = tornado.web.Application(handlers=[ 
    (r'/', MainHandler),  
    (r'/cws', CWSHandler), 


    (r"/(.*)", tornado.web.StaticFileHandler,{'path':'./'}) 
    ], cookie_secret="bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=") 

if __name__ == "__main__": 
    server = tornado.httpserver.HTTPServer(application) 
    server.listen(SETTING_CLIENT_LISTEN_PORT) 

    try: 
     tornado.ioloop.IOLoop.instance().start() 
     server.stop() 
    except KeyboardInterrupt: 
     print("Keyboard interupt") 
     pass 
    finally: 
     server.stop() 
     tornado.ioloop.IOLoop.instance().stop() 
+0

如果他們有訪問權限,那是因爲你在啓用它。發佈你的代碼,如果你想要具體的建議。 – RobertB

+0

您好我的代碼添加了。感謝 – chipnot

回答

2

問題是與您的網址,具體如下:

(r"/(.*)", tornado.web.StaticFileHandler,{'path':'./'}) 

已映射r'/(.*)'{'path': './'},這是你的項目目錄。所以,如果一個請求到來時一樣localhost:8080/program.py,將與此匹配 - /(.*)然後龍捲風將尋找一個在項目目錄名爲program.py文件。如果它在那裏找到它,它將提供該文件。

您應該保留所有的靜態文件在一個單獨的目錄中稱爲static(你可以將其命名爲任何你想要的,雖然)項目目錄內。然後將該目錄映射到所需的url。

例子:

(r"/(.*)", tornado.web.StaticFileHandler,{'path': 'static'}) 

或者更好的服務於該目錄下的一個/static/網址,而不是 - .*

(r"/static/(.*)", tornado.web.StaticFileHandler,{'path': 'static'}) 
+0

非常感謝您指出靜態路徑。這是我需要的。再次感謝 – chipnot

+0

@chipnot不客氣。如果此答案解決了您的問題,請隨時點擊此答案左側的**檢查圖標**。 – xyres

+0

完成。再次感謝 – chipnot