...
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.
...
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 Block | ||||
---|---|---|---|---|
| ||||
{code:xml}<error-page> <error-code>404</error-code> <location>/errorPages/404.html</location> </error-page> {code} |
When
...
using
...
a
...
single
...
installation
...
with
...
multiple
...
domains,
...
...
...
...
...
...
might
...
be
...
useful:
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml}<!-- The error handler for HTTP 404 Not Found, and alike. The page "/my-virtual-uri-mapping/error-404" does not exist, but is used in some URL rewriting configured like below: - The rewriting uses "ends-with" mappings, so "magnolia-cms.de" also matches "www.magnolia-cms.de". And simply using ".de" matches both domains as well. - When there are multiple matches, the longest match is selected. - If there's no match, then the mapping in "toUri" is used. - Using "forward:" ensures that Tomcat preserves the actual HTTP error code, making browsers and search engines understand that the page is actually an error page, even though a normal Magnolia page is shown to the visitor. Configuration + modules : + adminInterface : + virtualURIMapping : + my-error-forbidden + hosts - 1 .de=forward:/de/some/magnolia/forbidden/page - 2 .com=forward:/en/some/other/forbidden/page - class info.magnolia.cms.beans.config.HostBasedVirtualURIMapping - fromURI /my-virtual-uri-mapping/error-403 - toURI forward:/en/some/default/magnolia/forbidden/page + my-error-notfound + hosts - 1 .de=forward:/de/some/magnolia/notfound/page - 2 .com=forward:/en/some/other/notfound/page - class info.magnolia.cms.beans.config.HostBasedVirtualURIMapping - fromURI /my-virtual-uri-mapping/error-404 - toURI forward:/en/some/default/magnolia/notfound/page --> <error-page> <error-code>403</error-code> <location>/my-virtual-uri-mapping/error-403</location> </error-page> <error-page> <error-code>404</error-code> <location>/my-virtual-uri-mapping/error-404</location> </error-page> {code} |
A
...
500
...
Internal
...
Server
...
Error
...
might
...
best
...
be
...
served
...
without
...
relying
...
on
...
Magnolia.
...
Hence:
Code Block | ||||
---|---|---|---|---|
| ||||
{code:xml}<error-page> <error-code>500</error-code> <!-- Magnolia's default "/docroot" is known in server, filters, cms, bypasses. When using another path, be sure to add a bypass for that path as well. --> <location>/docroot/error-500.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.
...
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 Block |
---|
} /index/404.html {code} |
Edit
...
the
...
magnoliaPublic
...
web.xml
...
(inside
...
webapps\magnoliaPublic\WEB-INF\web.xml
...
)
...
and
...
add
...
the
...
following
...
section:
Code Block |
---|
} <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 Block |
---|
} <% 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 for example. {note} h4. When using this with Magnolia |
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 | ||||
---|---|---|---|---|
| =
| |||
} 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 ( {{
) Read what you can do [ |Repair broken bypass configuration] {warning}Go to the configuration menu and create new contentNode anywhere *but not at* {{ |
Go to the configuration menu and create new contentNode anywhere but not atserver/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
...
.
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