Jetty 7 - 禁用根文件夹中的目录列表/

时间:2013-10-16 14:35:58

标签: java jetty

我有很多生产服务器在每个服务器上运行RMI应用程序,还有4个Java Web应用程序,例如:

Server A:
RMI app by JNLP file;
webapp_1 (connected by RMI with local RMI app);
webapp_2 (connected by RMI with local RMI app);
webapp_3 (connected by RMI with local RMI app);
webapp_4 (connected by RMI with local RMI app);

Server B:
...the same..OK

所有用户在默认上下文中直接在8080端口(直接到Jetty)上访问此服务器,例如“main-area”,它可以通过某些html链接访问所有应用程序(RMI app,webapp_1,webapp_2等)

当某些用户访问“/”页面时,例如:

www.foo.com:8080/

main-area/
webapp_1/
webapp_2/
webapp_3/
...

Jetty返回包含所有应用程序的列表(就像Apache的目录列表一样)。

有没有办法阻止它,或者重定向到'main-area'上下文?

3 个答案:

答案 0 :(得分:3)

为该位置创建index.html文件。

这将被提供,因此不需要生成列表。

如果浏览器不遵守重定向,您可以在其中放置一个简单的重定向,以及普通链接。

答案 1 :(得分:3)

"/"

负责向您展示与${jetty.home}/etc/jetty.xml不匹配的网络应用程序上下文列表

org.eclipse.jetty.server.handler.DefaultHandler,以保持与Servlet规范的一致性。

禁用DefaultHandler:

如果你只想要一个简单的404,而没有DefaultHandler提供的信息,那么只需在<!-- =========================================================== --> <!-- Set handler Collection Structure --> <!-- =========================================================== --> <Set name="handler"> <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <Set name="handlers"> <Array type="org.eclipse.jetty.server.Handler"> <Item> <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/> </Item> <!-- Disable the DefaultHandler to avoid listing of non-matching contexts <Item> <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/> </Item> --> </Array> </Set> </New> </Set>

中注释掉它
"/"

"/"(ROOT)背景提供静态内容:

如果您希望根上下文${jetty.home}/webapps/ROOT(ROOT)提供其他内容,请创建一个[jetty-distribution-7.6.13.v20130916]$ cat webapps/ROOT/index.html <h1>This is ROOT</h1> 目录并在其中放入一个index.html文件。

"/"

这将部署一个静态内容webapp,您可以在其中放置您想要的任何内容,图像,CSS等。

自动将${jetty.home}/webapps/ROOT(ROOT)重定向到另一条路径:

注意:这不会与上述"/"选项,此选项或该选项同时发挥作用,但不能同时使用。

如果您希望Jetty自动将[jetty-distribution-7.6.13.v20130916]$ grep rewrite start.ini OPTIONS=Server,jsp,jmx,resources,websocket,ext,rewrite etc/jetty-rewrite.xml 重定向到另一个URL,请使用重写处理程序。

确保启用了重写OPTION,并包含一组重写规则xml

${jetty.home}/etc/jetty-rewrite.xml

接下来,您需要定义重写规则......

"/"的内容,用于将访问权限从"/test/"重定向到<?xml version="1.0"?> <!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd"> <Configure id="Server" class="org.eclipse.jetty.server.Server"> <Get id="oldhandler" name="handler"/> <Set name="handler"> <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler"> <Set name="handler"><Ref id="oldhandler"/></Set> <Set name="rewriteRequestURI">true</Set> <Set name="rewritePathInfo">false</Set> <Set name="originalPathAttribute">requestedPath</Set> <!-- redirect from the welcome page to a specific page --> <Call name="addRule"> <Arg> <New class="org.eclipse.jetty.rewrite.handler.RedirectRegexRule"> <Set name="regex">^/$</Set> <Set name="replacement">/test/</Set> </New> </Arg> </Call> </New> </Set> </Configure>

{{1}}

答案 2 :(得分:0)

感谢Thorbjørn Ravn Andersen解决方案:

我创建了一个基本的动态Web应用程序,其中包含一个带有JSP HTML / JS重定向的index.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html lang="en-US">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="refresh" content="1;url=bar/index.jsp">
        <script type="text/javascript">
            window.location.href = "bar/index.jsp"
        </script>
        <title>Page Redirection</title>
    </head>
    <body>
        If you are not redirected automatically, follow the <a href='bar/index.jsp'>main area</a>
    </body>
</html>

我部署为'ROOT.war',并在'... jetty / contexts /'中配置了'root.xml':

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/</Set>
  <Set name="war"><SystemProperty name="jetty.home" default="."/>/webapps/ROOT.war</Set>
</Configure>