Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Wiki Markup
{rate}
h1. The 404 Handler

In some projects you may want to have the possibility to define your own Error-Pages (as 404 etc.).
With magnolia it is either possible to define this pages internally in the website tree, or externally.

h2. Since magnolia 3.5 (magnolia internal error page)

If you are using Tomcat/Jboss you can do so by simple edit the magnoliaPublic {{web.xml}} (inside {{webapps\magnoliaPublic\WEB-INF\web.xml}})
and add the following section:
{code}
<error-page>
   <error-code>404</error-code>
   <location>/errorPages/404.html</location>
</error-page>
{code}
After your application server restarted, the error page will now come out of magnolia (with all it's benefits).

If you have an older version of magnolia or, for whatever reasons, want to have your error page outside of magnolia you can do this as well following the procedure below.

h2. Before magnolia 3.5 (external/redirected error page)

For this example let's assume that your magnolia site is under /index/
and that you have created your own 404.html error page under that..ie
{code}
/index/404.html
{code}
Edit the magnoliaPublic {{web.xml}} (inside {{webapps\magnoliaPublic\WEB-INF\web.xml}})
and add the following section:
{code}
<error-page>
     <error-code>404</error-code>
     <location>/admintemplates/404.jsp</location>
  </error-page>
{code}
Now, create a 404.jsp file inside your \webapps\magnoliaPublic\admintemplates directory
that contains the following jsp code
{code}
<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String contextName = request.getContextPath();
String newLocn = contextName + "/index/404.html";
response.setHeader("Location",newLocn);
%>
{code}
What will happen is that if a user requests a page that doesn't exist inside
your magnoliaPublic context then Tomcat will redirect the user to the {{/admintemplates/404.jsp}} page which then redirects to your {{/index/404.html}} page.

Why must you do it this way?? Well, your {{web.xml}} has to point to a file that actually exists somewhere in your {{webapps}} directory, not to a 'virtual' file in your Magnolia repository.  If you doubt this, try replacing {{/admintemplates/404.jsp}} with {{/magnoliaPublic/index/404.html}} and see what happens.  We point the {{web.xml}} to a 'real' file and then have that real file perform a redirect to your magnolia generated 404.html file.
{note}
Please note here, that when you are redirecting the error page, the page header received by the request will no longer by 404 but 302 instead. This may lead to some issues with search engines, like with google for example.
{note}

h4. When using this with Magnolia 3.5.x

Now to make this work with Magnolia v3.5.x you need to define a bypass for a custom jsp page created above.
{warning:title=Warning}
When configuring bypass all the values are applied *immediately*. In other words, your filter will be applied before it is configured, resulting in a completely broken configuration. Hence you must configure this node elsewhere in the tree and only when fully configured move it to ({{server/filters/bypasses}})

Read what you can do [if your bypass configuration is broken. | Repair broken bypass configuration ]
{warning}
Go to the configuration menu and create new contentNode anywhere *but not at*
{{server/filters/bypasses}} and call it {{404}} for this node create dataNode {{class}} and set it to {{info.magnolia.voting.voters.URIStartsWithVoter}} and dataNode {{pattern}} with value pointing to your {{404.jsp}} (i.e. {{/admintemplates/404.jsp}} in the case of example above). Once configured, move your node to {{server/filters/bypasses}}.
{quote}
In its previous incarnation on JspWiki, this page was last edited on Mar 31, 2007 10:07:56 PM by Magnolia
Other known authors include :
* RamonBuckland
* Jgibbens
* BorisKraft
{quote}