我正在使用龙卷风webserver的python。 应用程序工作正常,但我找不到阻止用户直接通过URL访问服务器文件的方法。 例如,我在服务器中有以下文件:
program.py
index.html的
main.html中
我想阻止用户通过网址直接访问上述服务器文件 例如:localhost:8080 / program.py或/index.html
我只希望他们访问localhost:8080 /或/ home
提前致谢
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 :(得分:2)
问题在于你的网址,具体是:
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="<?php echo home_url(); ?>">
<?php bloginfo('name'); ?>
</a>
</div>
<?php
wp_nav_menu( array(
'menu' => 'primary',
'theme_location' => 'primary',
'depth' => 2,
'container' => 'div',
'container_class' => 'collapse navbar-collapse',
'container_id' => 'bs-example-navbar-collapse-1',
'menu_class' => 'nav navbar-nav',
'fallback_cb' => 'WP_Bootstrap_Navwalker::fallback',
'walker' => new WP_Bootstrap_Navwalker())
);
?>
</div>
</nav>
您已将index.filter(x => x._1 == 1).map(x => println(x._2))
映射到(r"/(.*)", tornado.web.StaticFileHandler,{'path':'./'})
,这是您的项目目录。因此,如果请求与r'/(.*)'
类似,则会与此匹配 - {'path': './'}
,然后龙卷风会在项目目录中查找名为localhost:8080/program.py
的文件。如果它在那里找到它,它将提供该文件。
您应该将所有静态文件保存在项目目录中名为/(.*)
的单独目录中(您可以将其命名为任何名称)。然后使用所需的URL映射此目录。
示例:
program.py
或者更好的是,在static
网址而非 - (r"/(.*)", tornado.web.StaticFileHandler,{'path': 'static'})
下投放该目录。
/static/