The 404 Handler
What should the user see when they ask for page that doesn't exist ?
If using Tomcat you can use the web.xml file to specify an 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
/index/404.html
Edit the magnoliaPublic web.xml
(inside webapps\magnoliaPublic\WEB-INF\web.xml
)
and add the following section:
<error-page> <error-code>404</error-code> <location>/admintemplates/404.jsp</location> </error-page>
Now, create a 404.jsp file inside your \webapps\magnoliaPublic\admintemplates directory
that contains the following jsp code
<% response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); String contextName = request.getContextPath(); String newLocn = contextName + "/index/404.html"; response.setHeader("Location",newLocn); %>
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.
This method tested with 2.1-RC4 and 2.1.3
When using 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
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.
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
.
Valid for v21
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