This article covers a Bloomreach Experience Manager version 13. There's an updated version available that covers our most recent release.

2. Add a catch-all sitemap item that creates a dynamic 404 page

Assume, you have the following sitemap example:

/sitemap:
  /home:
    /news:
      /**:
    /agenda:
      /**:

URLs such as /home, /news/2010, /news/2010/foo, /agenda/2010 all can be matched. But what about the URL /home/foo, or /dossiers/2010. These URLs cannot be matched. Typically, when an old site from another platform is migrated to a HST-based implementation, all kind of websites and search engines contain old links that do not work anymore. For example /home.aspx.

When a URL cannot be matched, a org.hippoecm.hst.core.container.ContainerNotFoundException is propagated all the way to the web container, where you can catch it in the web.xml, see Handling error codes and exceptions by the web.xml. However, you can then not have a dynamic error page, with a dynamic repository based menu, or for example, a more clever error page showing a list of URL suggestions which you might be looking for.

Adding a catch-all sitemap item

Change your sitemap from above to:

sitemap example extended:

/sitemap:
  /home:
  /news:
    /**:
  /agenda:
    /**:
  /**:

Thus, we have added one ** matcher to the root. It does not matter whether it is located at the end or at the beginning as the HST URL matching tries to match the best match instead of the first. Also, now, it is clear that everything that does not match to the home, news and agenda items and subitems, will match **.

Now, all you need to do, is from the ** sitemap item, point to some hst:componentconfigurationid that contains all the HST components to create an error page with, like in this example snippet:

/pages:
  /standard:
  /errorpage:
    /body:     

Now, errorpage extends for example standard and contains:

  hst:componentclassname: org.hippoecm.hst.demo.components.Set404Component

and body is some error page custom body, for example it can do a search for documents that might be meant by the URL.

The Set404Component takes care of setting the correct response status code:

public class Set404Component extends BaseHstComponent {
    @Override
    public void doBeforeRender(HstRequest request, HstResponse response)
                                           throws HstComponentException {
        response.setStatus(404);
    }
}
Did you find this page helpful?
How could this documentation serve you better?
On this page
    Did you find this page helpful?
    How could this documentation serve you better?

    We rely on cookies

    to optimize our communication and to enhance your customer experience. By clicking on the Accept and Close button, you agree to the collection of cookies. You can also adjust your preferences by clicking on Manage Preferences. For more information please see our Privacy policy.

    Manage cookies
    Accept & close

    Cookies preferences

    Accept & close
    Back