Expand my Community achievements bar.

SOLVED

DAM Assets Redirect Possible?

Avatar

Level 1

My team has 10 PDFs located on our DAM that we are wanting to have redirect to a different file. Does anyone know if this is possible? 

Thanks, 

1 Accepted Solution

Avatar

Correct answer by
Community Advisor

Hi @garrettshue,

This is possible, you have a look on below options:

  • Apache rewrite map - https://httpd.apache.org/docs/current/rewrite/rewritemap.html
  • Redirect Map Manager form ACS Commons - https://adobe-consulting-services.github.io/acs-aem-commons/features/redirect-map-manager/index.html
  • Finally you can write your own Sling Filter. Below is very simple example, that will redirect you from /document/adobe.pdf to /content/dam/wknd/en/adobefile.pdf. I have tested it on clear AEM 6.5.13 - and it works without any issue. Of course you will need to manage list of redirect somehow, but there are many options, e.g. CA Configuration, Metadata schema etc
    package com.example.filters;
    
    import org.apache.sling.api.SlingHttpServletRequest;
    import org.apache.sling.api.SlingHttpServletResponse;
    import org.apache.sling.api.servlets.HttpConstants;
    import org.apache.sling.engine.EngineConstants;
    import org.osgi.framework.Constants;
    import org.osgi.service.component.annotations.Component;
    
    import javax.servlet.*;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    @Component(service = Filter.class, immediate = true, property = {
            EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST,
            EngineConstants.SLING_FILTER_METHODS + "=" + HttpConstants.METHOD_GET,
            Constants.SERVICE_RANKING + "=" + Integer.MAX_VALUE
    })
    public class RedirectFilter implements Filter {
    
        private Map<String, String> redirectMap = new HashMap<String, String>();
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            redirectMap.put("/document/adobe.pdf", "/content/dam/wknd/en/adobefile.pdf");
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) servletRequest;
            SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) servletResponse;
    
            String path = slingRequest.getRequestPathInfo().getResourcePath();
            if (redirectMap.containsKey(slingRequest.getRequestPathInfo().getResourcePath())) {
                slingResponse.sendRedirect(redirectMap.get(path));
                return;
            }
            filterChain.doFilter(servletRequest, servletResponse);
        }
    
        @Override
        public void destroy() {
        }
    }
    

View solution in original post

2 Replies

Avatar

Correct answer by
Community Advisor

Hi @garrettshue,

This is possible, you have a look on below options:

  • Apache rewrite map - https://httpd.apache.org/docs/current/rewrite/rewritemap.html
  • Redirect Map Manager form ACS Commons - https://adobe-consulting-services.github.io/acs-aem-commons/features/redirect-map-manager/index.html
  • Finally you can write your own Sling Filter. Below is very simple example, that will redirect you from /document/adobe.pdf to /content/dam/wknd/en/adobefile.pdf. I have tested it on clear AEM 6.5.13 - and it works without any issue. Of course you will need to manage list of redirect somehow, but there are many options, e.g. CA Configuration, Metadata schema etc
    package com.example.filters;
    
    import org.apache.sling.api.SlingHttpServletRequest;
    import org.apache.sling.api.SlingHttpServletResponse;
    import org.apache.sling.api.servlets.HttpConstants;
    import org.apache.sling.engine.EngineConstants;
    import org.osgi.framework.Constants;
    import org.osgi.service.component.annotations.Component;
    
    import javax.servlet.*;
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    @Component(service = Filter.class, immediate = true, property = {
            EngineConstants.SLING_FILTER_SCOPE + "=" + EngineConstants.FILTER_SCOPE_REQUEST,
            EngineConstants.SLING_FILTER_METHODS + "=" + HttpConstants.METHOD_GET,
            Constants.SERVICE_RANKING + "=" + Integer.MAX_VALUE
    })
    public class RedirectFilter implements Filter {
    
        private Map<String, String> redirectMap = new HashMap<String, String>();
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            redirectMap.put("/document/adobe.pdf", "/content/dam/wknd/en/adobefile.pdf");
        }
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            SlingHttpServletRequest slingRequest = (SlingHttpServletRequest) servletRequest;
            SlingHttpServletResponse slingResponse = (SlingHttpServletResponse) servletResponse;
    
            String path = slingRequest.getRequestPathInfo().getResourcePath();
            if (redirectMap.containsKey(slingRequest.getRequestPathInfo().getResourcePath())) {
                slingResponse.sendRedirect(redirectMap.get(path));
                return;
            }
            filterChain.doFilter(servletRequest, servletResponse);
        }
    
        @Override
        public void destroy() {
        }
    }
    

Avatar

Community Advisor

Hi @garrettshue ,

 

 

 

Though we can write redirects but curious to know if we are talking about only 10 PDFs then why don't we replace them with correct files. Redirects can be seen on browser and redirecting one pdf URL to another one is not a good user experience.

 

Unless those URLs are bookmarked ones.

 

Thanks,

Ritesh Mittal