diff options
| author | luccioman <luccioman@users.noreply.github.com> | 2016-11-09 02:40:33 +0100 |
|---|---|---|
| committer | luccioman <luccioman@users.noreply.github.com> | 2016-11-09 02:40:33 +0100 |
| commit | 7296e3884fd4511729c18db7db257afee00eec2a (patch) | |
| tree | 0f8bbdac9c8bc35d6e9aa5c64938861fa9f0d9c3 | |
| parent | 042c2868dff4ee8924a81e2c239e868920b3622c (diff) | |
Switched even more URLs to pure relative ones.
Thus a YaCy peer can run behind a reverse proxy subfolder without need
for the reverse proxy to rewrite HTML links (a CPU costly operation).
Tested on Debian Jessie with an apache2 reverse proxy.
See related mantis issues http://mantis.tokeek.de/view.php?id=106 and
http://mantis.tokeek.de/view.php?id=701
| -rw-r--r-- | defaults/yacy.init | 6 | ||||
| -rw-r--r-- | htroot/Status.html | 2 | ||||
| -rw-r--r-- | htroot/env/templates/embeddedheader.template | 2 | ||||
| -rw-r--r-- | htroot/env/templates/header.template | 4 | ||||
| -rw-r--r-- | htroot/env/templates/metas.template | 28 | ||||
| -rw-r--r-- | htroot/env/templates/simpleheader.template | 10 | ||||
| -rw-r--r-- | source/net/yacy/cora/federate/solr/responsewriter/HTMLResponseWriter.java | 30 | ||||
| -rw-r--r-- | source/net/yacy/http/servlets/YaCyDefaultServlet.java | 25 | ||||
| -rw-r--r-- | source/net/yacy/server/servletProperties.java | 3 | ||||
| -rw-r--r-- | test/java/net/yacy/http/servlets/YaCyDefaultServletTest.java | 21 |
10 files changed, 90 insertions, 41 deletions
diff --git a/defaults/yacy.init b/defaults/yacy.init index d99aeaff4..4da1eb7df 100644 --- a/defaults/yacy.init +++ b/defaults/yacy.init @@ -289,8 +289,8 @@ promoteSearchPageGreeting.useNetworkName = false # the following attributes can be used to define a custom image, alternative text and home page on the search page
promoteSearchPageGreeting.homepage = http://yacy.net
promoteSearchPageGreeting.imageAlt = YaCy project web site
-promoteSearchPageGreeting.largeImage = /env/grafics/YaCyLogo_120ppi.png
-promoteSearchPageGreeting.smallImage = /env/grafics/YaCyLogo_60ppi.png
+promoteSearchPageGreeting.largeImage = env/grafics/YaCyLogo_120ppi.png
+promoteSearchPageGreeting.smallImage = env/grafics/YaCyLogo_60ppi.png
# the path to the public reverse word index for text files (web pages)
# the primary path is relative to the data root, the secondary path is an absolute path
@@ -1149,7 +1149,7 @@ content.phpbb3.dumpfile = # search engine teaser: an about box in search results
# this is only shown, if the about.body is filled
about.headline=Please support YaCy!
-about.body=<iframe src="env/donate.html" width="100%" height="90" border="0" frameborder="0" scrolling="no" hspace="0" vspace="0" name="donate"></iframe><br/><div style="padding:8px;">If you run a YaCy server, feel free to replace our donation plea with your own support message, use the <a href="/ConfigPortal.html">Portal Configuration</a> servlet.</div>
+about.body=<iframe src="env/donate.html" width="100%" height="90" border="0" frameborder="0" scrolling="no" hspace="0" vspace="0" name="donate"></iframe><br/><div style="padding:8px;">If you run a YaCy server, feel free to replace our donation plea with your own support message, use the <a href="ConfigPortal.html">Portal Configuration</a> servlet.</div>
donation.iframesource=http://yacy.net/include/donate.html
donation.iframetarget=env/donate.html
diff --git a/htroot/Status.html b/htroot/Status.html index 9db8e3c05..0be0c3820 100644 --- a/htroot/Status.html +++ b/htroot/Status.html @@ -1,7 +1,7 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> - #(forwardToConfigBasic)#::<meta http-equiv="REFRESH" content="0; url=/ConfigBasic.html" />#(/forwardToConfigBasic)# + #(forwardToConfigBasic)#::<meta http-equiv="REFRESH" content="0; url=ConfigBasic.html" />#(/forwardToConfigBasic)# <title>YaCy '#[clientname]#': Console Status</title> #%env/templates/metas.template%# <script type="text/javascript"> diff --git a/htroot/env/templates/embeddedheader.template b/htroot/env/templates/embeddedheader.template index 8a99534c5..e62298de2 100644 --- a/htroot/env/templates/embeddedheader.template +++ b/htroot/env/templates/embeddedheader.template @@ -3,7 +3,7 @@ <div class="container-fluid"> <div class="navbar-header"> <a class="navbar-brand" id="navbar-brand" href="#[promoteSearchPageGreeting.homepage]#" style="position:absolute;top:-6px;display:inline;white-space:nowrap;"> - <img id="greeting-icon" class="yacylogo" src="#[promoteSearchPageGreeting.smallImage]#" alt="#[promoteSearchPageGreeting.imageAlt]#" style="height:auto; width:auto; max-width:200px; max-height:32px;vertical-align:middle"> <span id="greeting"></span> + <img id="greeting-icon" class="yacylogo" src="#[relativeBase]##[promoteSearchPageGreeting.smallImage]#" alt="#[promoteSearchPageGreeting.imageAlt]#" style="height:auto; width:auto; max-width:200px; max-height:32px;vertical-align:middle"> <span id="greeting"></span> </a> </div> </div> diff --git a/htroot/env/templates/header.template b/htroot/env/templates/header.template index 6ea1dc7f3..6d8a534ee 100644 --- a/htroot/env/templates/header.template +++ b/htroot/env/templates/header.template @@ -8,8 +8,8 @@ <span class="icon-bar"></span> <span class="icon-bar"></span> </button> - <a class="navbar-brand" id="navbar-brand" href="/" style="position:absolute;top:-6px;display:inline;white-space:nowrap;"> - <img id="greeting-icon" class="yacylogo" src="/env/grafics/yacy.png" alt="YaCy" style="height:auto; width:auto; max-width:200px; max-height:32px;vertical-align:middle;float:left;"> + <a class="navbar-brand" id="navbar-brand" href="./" style="position:absolute;top:-6px;display:inline;white-space:nowrap;"> + <img id="greeting-icon" class="yacylogo" src="env/grafics/yacy.png" alt="YaCy" style="height:auto; width:auto; max-width:200px; max-height:32px;vertical-align:middle;float:left;"> <span style="position:absolute;top:50%;float:left;"> Administration</span> </a> <form class="navbar-form" method="get" accept-charset="UTF-8" action="yacysearch.html" style="padding-left:200px;max-width:400px;"> diff --git a/htroot/env/templates/metas.template b/htroot/env/templates/metas.template index a280eca9d..813dfb032 100644 --- a/htroot/env/templates/metas.template +++ b/htroot/env/templates/metas.template @@ -1,5 +1,5 @@ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />
+ <link rel="shortcut icon" type="image/x-icon" href="#[relativeBase]#favicon.ico" />
<meta name="Content-Language" content="English, Englisch" />
<meta name="keywords" content="YaCy HTTP search engine spider indexer java network open free download Mac Windows Linux Software development" />
<meta name="description" content="Software HTTP Freeware Home Page" />
@@ -9,8 +9,8 @@ <meta name="viewport" content="width=device-width, initial-scale=1">
<!-- Bootstrap core CSS -->
- <link href="/env/bootstrap/css/bootstrap.min.css" rel="stylesheet">
- <link href="/env/bootstrap/css/bootstrap-switch.min.css" rel="stylesheet">
+ <link href="#[relativeBase]#env/bootstrap/css/bootstrap.min.css" rel="stylesheet">
+ <link href="#[relativeBase]#env/bootstrap/css/bootstrap-switch.min.css" rel="stylesheet">
<script>
/*
@@ -40,29 +40,29 @@ for the JavaScript code in this page. */
</script>
- <script src="/env/bootstrap/js/jquery.min.js"></script>
- <script src="/env/bootstrap/js/bootstrap.min.js"></script>
- <script src="/env/bootstrap/js/bootstrap-switch.min.js"></script>
+ <script src="#[relativeBase]#env/bootstrap/js/jquery.min.js"></script>
+ <script src="#[relativeBase]#env/bootstrap/js/bootstrap.min.js"></script>
+ <script src="#[relativeBase]#env/bootstrap/js/bootstrap-switch.min.js"></script>
<!-- Custom styles for this template, i.e. navigation (move this to base.css) -->
- <link href="/env/bootstrap-base.css" rel="stylesheet">
+ <link href="#[relativeBase]#env/bootstrap-base.css" rel="stylesheet">
<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!--[if lt IE 9]>
- <script src="/env/bootstrap/js/html5shiv.js"></script>
- <script src="/env/bootstrap/js/respond.min.js"></script>
+ <script src="#[relativeBase]#env/bootstrap/js/html5shiv.js"></script>
+ <script src="#[relativeBase]#env/bootstrap/js/respond.min.js"></script>
<![endif]-->
<!-- old css styles -->
- <link rel="stylesheet" type="text/css" media="all" href="/env/base.css" />
- <link rel="stylesheet" type="text/css" media="screen" href="/env/style.css" />
+ <link rel="stylesheet" type="text/css" media="all" href="#[relativeBase]#env/base.css" />
+ <link rel="stylesheet" type="text/css" media="screen" href="#[relativeBase]#env/style.css" />
<!--[if lt IE 6]>
- <link rel="stylesheet" type="text/css" media="screen" href="/env/oldie.css" />
+ <link rel="stylesheet" type="text/css" media="screen" href="#[relativeBase]#env/oldie.css" />
<![endif]-->
<!--[if lte IE 6.0]>
- <link rel="stylesheet" type="text/css" media="screen" href="/env/ie6.css" />
+ <link rel="stylesheet" type="text/css" media="screen" href="#[relativeBase]#env/ie6.css" />
<![endif]-->
<!--[if lte IE 7.0]>
- <link rel="stylesheet" type="text/css" media="screen" href="/env/ie7.css" />
+ <link rel="stylesheet" type="text/css" media="screen" href="#[relativeBase]#env/ie7.css" />
<![endif]-->
<!-- (C), Architecture: Michael Peter Christen; Contact: mc <at> yacy.net -->
diff --git a/htroot/env/templates/simpleheader.template b/htroot/env/templates/simpleheader.template index 9b0748633..359e7f8e3 100644 --- a/htroot/env/templates/simpleheader.template +++ b/htroot/env/templates/simpleheader.template @@ -27,11 +27,11 @@ <li> <i>Example Calls to the Search API:</i></li> <li><a href="yacysearch.json?query=www" target="_blank"><i>API</i> YaCy JSON</a></li> <li><a href="yacysearch.rss?query=www" target="_blank"><i>API</i> YaCy RSS/Opensearch</a></li> - <li><a href="/solr/select?hl=false&wt=opensearch&facet=true&facet.mincount=1&facet.field=url_file_ext_s&start=0&rows=10&sort=load_date_dt+desc&q=description_txt:%5B*%20TO%20*%5D" target="_blank"><i>API</i> Solr RSS/Opensearch</a></li> - <li><a href="/solr/select?hl=false&wt=yjson&facet=true&facet.mincount=1&facet.field=url_file_ext_s&start=0&rows=10&query=www" target="_blank"><i>API</i> Solr Default Core / JSON</a></li> - <li><a href="/solr/collection1/select?q=*:*&defType=edismax&start=0&rows=3" target="_blank"><i>API</i> Solr Default Core / XML</a></li> - <li><a href="/solr/webgraph/select?q=*:*&defType=edismax&start=0&rows=3" target="_blank"><i>API</i> Solr Webgraph Core / XML</a></li> - <li><a href="/gsa/search?q=www&num=3" target="_blank"><i>API</i> Google Appliance API / XML</a></li> + <li><a href="solr/select?hl=false&wt=opensearch&facet=true&facet.mincount=1&facet.field=url_file_ext_s&start=0&rows=10&sort=load_date_dt+desc&q=description_txt:%5B*%20TO%20*%5D" target="_blank"><i>API</i> Solr RSS/Opensearch</a></li> + <li><a href="solr/select?hl=false&wt=yjson&facet=true&facet.mincount=1&facet.field=url_file_ext_s&start=0&rows=10&query=www" target="_blank"><i>API</i> Solr Default Core / JSON</a></li> + <li><a href="solr/collection1/select?q=*:*&defType=edismax&start=0&rows=3" target="_blank"><i>API</i> Solr Default Core / XML</a></li> + <li><a href="solr/webgraph/select?q=*:*&defType=edismax&start=0&rows=3" target="_blank"><i>API</i> Solr Webgraph Core / XML</a></li> + <li><a href="gsa/search?q=www&num=3" target="_blank"><i>API</i> Google Appliance API / XML</a></li> </ul> </li> <li id="header_help" class="dropdown"> diff --git a/source/net/yacy/cora/federate/solr/responsewriter/HTMLResponseWriter.java b/source/net/yacy/cora/federate/solr/responsewriter/HTMLResponseWriter.java index fca55f76b..d8df6a309 100644 --- a/source/net/yacy/cora/federate/solr/responsewriter/HTMLResponseWriter.java +++ b/source/net/yacy/cora/federate/solr/responsewriter/HTMLResponseWriter.java @@ -121,35 +121,35 @@ public class HTMLResponseWriter implements QueryResponseWriter { //writer.write("<link rel=\"transformation\" href=\"http://www-sop.inria.fr/acacia/soft/RDFa2RDFXML.xsl\"/>\n");
writer.write("<!-- Bootstrap core CSS -->\n");
- writer.write("<link href=\"/env/bootstrap/css/bootstrap.min.css\" rel=\"stylesheet\">\n");
- writer.write("<link href=\"/env/bootstrap/css/bootstrap-switch.min.css\" rel=\"stylesheet\">\n");
- //writer.write("<script src=\"/env/bootstrap/js/jquery.min.js\"></script>\n");
- //writer.write("<script src=\"/env/bootstrap/js/bootstrap.min.js\"></script>\n");
- //writer.write("<script src=\"/env/bootstrap/js/bootstrap-switch.min.js\"></script>\n");
+ writer.write("<link href=\"../env/bootstrap/css/bootstrap.min.css\" rel=\"stylesheet\">\n");
+ writer.write("<link href=\"../env/bootstrap/css/bootstrap-switch.min.css\" rel=\"stylesheet\">\n");
+ //writer.write("<script src=\"../env/bootstrap/js/jquery.min.js\"></script>\n");
+ //writer.write("<script src=\"../env/bootstrap/js/bootstrap.min.js\"></script>\n");
+ //writer.write("<script src=\"../env/bootstrap/js/bootstrap-switch.min.js\"></script>\n");
writer.write("<!-- Custom styles for this template, i.e. navigation (move this to base.css) -->\n");
- writer.write("<link href=\"/env/bootstrap-base.css\" rel=\"stylesheet\">\n");
+ writer.write("<link href=\"../env/bootstrap-base.css\" rel=\"stylesheet\">\n");
//writer.write("<!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->\n");
//writer.write("<!--[if lt IE 9]>\n");
- //writer.write(" <script src=\"/env/bootstrap/js/html5shiv.js\"></script>\n");
- //writer.write(" <script src=\"/env/bootstrap/js/respond.min.js\"></script>\n");
+ //writer.write(" <script src=\"../env/bootstrap/js/html5shiv.js\"></script>\n");
+ //writer.write(" <script src=\"../env/bootstrap/js/respond.min.js\"></script>\n");
//writer.write("<![endif]-->\n");
writer.write("<!-- old css styles -->\n");
- writer.write("<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"/env/base.css\" />\n");
- writer.write("<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/env/style.css\" />\n");
+ writer.write("<link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"../env/base.css\" />\n");
+ writer.write("<link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"../env/style.css\" />\n");
writer.write("<!--[if lt IE 6]>\n");
- writer.write(" <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/env/oldie.css\" />\n");
+ writer.write(" <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"../env/oldie.css\" />\n");
writer.write("<![endif]-->\n");
writer.write("<!--[if lte IE 6.0]>\n");
- writer.write(" <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/env/ie6.css\" />\n");
+ writer.write(" <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"../env/ie6.css\" />\n");
writer.write("<![endif]-->\n");
writer.write("<!--[if lte IE 7.0]>\n");
- writer.write(" <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"/env/ie7.css\" />\n");
+ writer.write(" <link rel=\"stylesheet\" type=\"text/css\" media=\"screen\" href=\"../env/ie7.css\" />\n");
writer.write("<![endif]-->\n");
writer.write("<!-- (C), Architecture: Michael Peter Christen; Contact: mc <at> yacy.net -->\n");
NamedList<Object> paramsList = request.getOriginalParams().toNamedList();
paramsList.remove("wt");
- String xmlquery = dqp.matcher("/solr/select?" + SolrParams.toSolrParams(paramsList).toString()).replaceAll("%22");
+ String xmlquery = dqp.matcher("../solr/select?" + SolrParams.toSolrParams(paramsList).toString()).replaceAll("%22");
DocList response = ((ResultContext) values.get("response")).docs;
final int sz = response.size();
@@ -194,7 +194,7 @@ public class HTMLResponseWriter implements QueryResponseWriter { // add a link to re-crawl this url (in case it is a remote metadata only entry)
String sku = tdoc.get(CollectionSchema.sku.getSolrFieldName());
- final String jsc= "javascript:w = window.open('/QuickCrawlLink_p.html?indexText=on&indexMedia=on&crawlingQ=on&followFrames=on&obeyHtmlRobotsNoindex=on&obeyHtmlRobotsNofollow=off&xdstopw=on&title='+escape('"+title+"')+'&url='+escape('"+sku+"'),'_blank','height=250,width=600,resizable=yes,scrollbar=no,directory=no,menubar=no,location=no');w.focus();";
+ final String jsc= "javascript:w = window.open('../QuickCrawlLink_p.html?indexText=on&indexMedia=on&crawlingQ=on&followFrames=on&obeyHtmlRobotsNoindex=on&obeyHtmlRobotsNofollow=off&xdstopw=on&title='+escape('"+title+"')+'&url='+escape('"+sku+"'),'_blank','height=250,width=600,resizable=yes,scrollbar=no,directory=no,menubar=no,location=no');w.focus();";
writer.write("<div class='btn btn-default btn-sm' style='float:right' onclick=\""+jsc+"\">re-crawl url</div>\n");
writer.write("<h1 property=\"dc:Title\">" + title + "</h1>\n");
diff --git a/source/net/yacy/http/servlets/YaCyDefaultServlet.java b/source/net/yacy/http/servlets/YaCyDefaultServlet.java index 276a86047..9569d747b 100644 --- a/source/net/yacy/http/servlets/YaCyDefaultServlet.java +++ b/source/net/yacy/http/servlets/YaCyDefaultServlet.java @@ -1064,6 +1064,7 @@ public class YaCyDefaultServlet extends HttpServlet { templatePatterns.putHTML(servletProperties.PEER_STAT_CLIENTNAME, sb.peers.mySeed().getName());
templatePatterns.putHTML(servletProperties.PEER_STAT_CLIENTID, sb.peers.myID());
templatePatterns.put(servletProperties.PEER_STAT_MYTIME, GenericFormatter.SHORT_SECOND_FORMATTER.format());
+ templatePatterns.put(servletProperties.RELATIVE_BASE, YaCyDefaultServlet.getRelativeBase(target));
Seed myPeer = sb.peers.mySeed();
templatePatterns.put("newpeer", myPeer.getAge() >= 1 ? 0 : 1);
templatePatterns.putHTML("newpeer_peerhash", myPeer.hash);
@@ -1117,6 +1118,30 @@ public class YaCyDefaultServlet extends HttpServlet { }
}
}
+
+ /**
+ * Returns the relative path prefix necessary to reach htroot from the deepest level of targetPath.<br>
+ * Example : targetPath="api/citation.html" returns "../"
+ * targetPath is supposed to have been cleaned earlier from special chars such as "?", spaces, "//".
+ * @param targetPath target path relative to htroot
+ * @return the relative path prefix, eventually empty
+ */
+ protected static String getRelativeBase(String targetPath) {
+ StringBuilder relativeBase = new StringBuilder();
+ if(targetPath != null) {
+ /* Normalize target path : it is relative to htroot, starting with a slash or not */
+ if(targetPath.startsWith("/")) {
+ targetPath = targetPath.substring(1, targetPath.length());
+ }
+
+ int slashIndex = targetPath.indexOf('/', 0);
+ while(slashIndex >= 0) {
+ relativeBase.append("../");
+ slashIndex = targetPath.indexOf('/', slashIndex + 1);
+ }
+ }
+ return relativeBase.toString();
+ }
/**
* Eventually update response headers for image resources
diff --git a/source/net/yacy/server/servletProperties.java b/source/net/yacy/server/servletProperties.java index 2fc3542c3..8879e92dd 100644 --- a/source/net/yacy/server/servletProperties.java +++ b/source/net/yacy/server/servletProperties.java @@ -32,6 +32,9 @@ public class servletProperties extends serverObjects { public static final String PEER_STAT_MYTIME = "mytime"; public static final String PEER_STAT_CLIENTNAME = "clientname"; public static final String PEER_STAT_CLIENTID = "clientid"; + /** Key of the relative path part from requested file to reach htroot, to be used in templates such as metas.template. + * Example : target="api/citation.html" -> relativeBase="../" */ + public static final String RELATIVE_BASE = "relativeBase"; private String prefix=""; diff --git a/test/java/net/yacy/http/servlets/YaCyDefaultServletTest.java b/test/java/net/yacy/http/servlets/YaCyDefaultServletTest.java index ceecc3c98..3ed72a801 100644 --- a/test/java/net/yacy/http/servlets/YaCyDefaultServletTest.java +++ b/test/java/net/yacy/http/servlets/YaCyDefaultServletTest.java @@ -116,5 +116,26 @@ public class YaCyDefaultServletTest { assertEquals("http://myhost.com:8090", YaCyDefaultServlet.getContext(header, null)); } + /** + * Tests on getRelativeBase() + */ + @Test + public void testGetRelativeBase() { + assertEquals("", YaCyDefaultServlet.getRelativeBase(null)); + assertEquals("", YaCyDefaultServlet.getRelativeBase("")); + assertEquals("", YaCyDefaultServlet.getRelativeBase("/")); + assertEquals("", YaCyDefaultServlet.getRelativeBase("/file.html")); + assertEquals("", YaCyDefaultServlet.getRelativeBase("file.html")); + assertEquals("", YaCyDefaultServlet.getRelativeBase("resource")); + assertEquals("../", YaCyDefaultServlet.getRelativeBase("folder/file.html")); + assertEquals("../", YaCyDefaultServlet.getRelativeBase("folder/resource")); + assertEquals("../", YaCyDefaultServlet.getRelativeBase("/folder/resource")); + assertEquals("../", YaCyDefaultServlet.getRelativeBase("a/b")); + assertEquals("../../", YaCyDefaultServlet.getRelativeBase("folder/subfolder/resource")); + assertEquals("../../", YaCyDefaultServlet.getRelativeBase("/folder/subfolder/resource")); + assertEquals("../", YaCyDefaultServlet.getRelativeBase("folder/")); + assertEquals("../../", YaCyDefaultServlet.getRelativeBase("folder/subfolder/")); + } + } |
