DAM Assets Redirect Possible? | Community
Skip to main content
February 3, 2023
Solved

DAM Assets Redirect Possible?

  • February 3, 2023
  • 2 replies
  • 1236 views

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, 

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by lukasz-m

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() {
        }
    }
    

2 replies

lukasz-m
Community Advisor
lukasz-mCommunity AdvisorAccepted solution
Community Advisor
February 4, 2023

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() {
        }
    }
    
Ritesh_Mittal
Community Advisor and Adobe Champion
Community Advisor and Adobe Champion
February 4, 2023

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