This is an automated email from the ASF dual-hosted git repository.
mridulpathak pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new c27b22af66 Fixed: Keep the redirection of a path alias to its aliasTo
on the web site (OFBIZ-13645)
c27b22af66 is described below
commit c27b22af66e82c085c8b0486138b228a73eff3dc
Author: Mridul Pathak <[email protected]>
AuthorDate: Sun Oct 4 14:32:10 2026 +0530
Fixed: Keep the redirection of a path alias to its aliasTo on the web site
(OFBIZ-13645)
When a WebSitePathAlias with an aliasTo is requested, CmsEvents.cms
redirects to a location built from the context path, the servlet path, the
hosted path alias, the request URI that the client sent without its last
segment, and the aliasTo. That request URI is not normalized, so when the web
application is mounted on the root a request whose URI starts with two slashes
gave a location that starts with two slashes, which a browser follows to
another host.
The location is now built in CmsEvents.getAliasRedirectLocation, which
always returns a path on the web site, with a single leading slash, and without
any control character, such as a line break, that would end the header. The
locations of the redirections that were already working are unchanged.
---
.../org/apache/ofbiz/content/cms/CmsEvents.java | 37 +++++++++++++++++-----
1 file changed, 29 insertions(+), 8 deletions(-)
diff --git
a/applications/content/src/main/java/org/apache/ofbiz/content/cms/CmsEvents.java
b/applications/content/src/main/java/org/apache/ofbiz/content/cms/CmsEvents.java
index 9b1b251b65..668998087d 100644
---
a/applications/content/src/main/java/org/apache/ofbiz/content/cms/CmsEvents.java
+++
b/applications/content/src/main/java/org/apache/ofbiz/content/cms/CmsEvents.java
@@ -61,6 +61,31 @@ public final class CmsEvents {
private CmsEvents() {
}
+ /**
+ * Builds the location a path alias is redirected to: the context path,
the servlet path, the hosted path alias if there is
+ * one, the part of the request URI before the last segment, and the alias
the path is redirected to.
+ * The request URI is the one the client sent and it is not normalized, so
it can start with two slashes, for example
+ * //example.com/.. when the web application is mounted on the root, and a
browser takes a location that starts with two
+ * slashes as another host. The location is therefore always a path on
this site, and it never contains a control character,
+ * such as a line break, which would end the header.
+ * @param context the context path of the request
+ * @param servletPath the servlet path of the request
+ * @param hostedPathAlias the hosted path alias of the web site, or null
+ * @param requestUri the request URI
+ * @param alias the path to redirect to, starting with a slash
+ * @return the location to redirect to
+ */
+ static String getAliasRedirectLocation(String context, String servletPath,
String hostedPathAlias, String requestUri,
+ String alias) {
+ String location = context + servletPath;
+ if (hostedPathAlias != null) {
+ location += "/" + hostedPathAlias;
+ }
+ String uri = requestUri.substring(context.length());
+ uri = uri.substring(0, uri.lastIndexOf('/'));
+ return "/" + (location + uri + alias).replaceAll("\\p{Cntrl}",
"").replaceFirst("^[/\\\\]+", "");
+ }
+
public static String cms(HttpServletRequest request, HttpServletResponse
response) {
Delegator delegator = (Delegator) request.getAttribute("delegator");
LocalDispatcher dispatcher = (LocalDispatcher)
request.getAttribute("dispatcher");
@@ -181,19 +206,15 @@ public final class CmsEvents {
alias = "/" + alias;
}
- String context = request.getContextPath();
- String location = context + request.getServletPath();
GenericValue webSite =
WebSiteWorker.getWebSite(request);
+ String hostedPathAlias = null;
if (webSite != null &&
webSite.getString("hostedPathAlias") != null && !"ROOT".equals(pathInfo)) {
- location += "/" +
webSite.getString("hostedPathAlias");
+ hostedPathAlias =
webSite.getString("hostedPathAlias");
}
- String uriWithContext = request.getRequestURI();
- String uri =
uriWithContext.substring(context.length());
- uri = uri.substring(0, uri.lastIndexOf('/'));
-
response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
- response.setHeader("Location", location + uri + alias);
+ response.setHeader("Location",
getAliasRedirectLocation(request.getContextPath(), request.getServletPath(),
+ hostedPathAlias, request.getRequestURI(),
alias));
response.setHeader("Connection", "close");
return null; // null to not process any views