/usr/share/doc/libapache2-mod-python-doc/doc-html/tut-404-handler.html is in libapache2-mod-python-doc 3.3.1-11ubuntu2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<link rel="STYLESHEET" href="modpython.css" type='text/css' />
<link rel="first" href="modpython.html" title='Mod_python Manual' />
<link rel='contents' href='contents.html' title="Contents" />
<link rel='index' href='genindex.html' title='Index' />
<link rel='last' href='about.html' title='About this document...' />
<link rel='help' href='about.html' title='About this document...' />
<link rel="prev" href="tut-more-complicated.html" />
<link rel="parent" href="tutorial.html" />
<link rel="next" href="pythonapi.html" />
<meta name='aesop' content='information' />
<title>3.5 Your Own 404 Handler</title>
</head>
<body>
<DIV CLASS="navigation">
<div id='top-navigation-panel' xml:id='top-navigation-panel'>
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td class='online-navigation'><a rel="prev" title="3.4 Now something More"
href="tut-more-complicated.html"><img src='previous.png'
border='0' height='32' alt='Previous Page' width='32' /></A></td>
<td class='online-navigation'><a rel="parent" title="3. Tutorial"
href="tutorial.html"><img src='up.png'
border='0' height='32' alt='Up One Level' width='32' /></A></td>
<td class='online-navigation'><a rel="next" title="4. Python API"
href="pythonapi.html"><img src='next.png'
border='0' height='32' alt='Next Page' width='32' /></A></td>
<td align="center" width="100%">Mod_python Manual</td>
<td class='online-navigation'><a rel="contents" title="Table of Contents"
href="contents.html"><img src='contents.png'
border='0' height='32' alt='Contents' width='32' /></A></td>
<td class='online-navigation'><img src='blank.png'
border='0' height='32' alt='' width='32' /></td>
<td class='online-navigation'><a rel="index" title="Index"
href="genindex.html"><img src='index.png'
border='0' height='32' alt='Index' width='32' /></A></td>
</tr></table>
<div class='online-navigation'>
<b class="navlabel">Previous:</b>
<a class="sectref" rel="prev" href="tut-more-complicated.html">3.4 Now something More</A>
<b class="navlabel">Up:</b>
<a class="sectref" rel="parent" href="tutorial.html">3. Tutorial</A>
<b class="navlabel">Next:</b>
<a class="sectref" rel="next" href="pythonapi.html">4. Python API</A>
</div>
<hr /></div>
</DIV>
<!--End of Navigation Panel-->
<H1><A NAME="SECTION005500000000000000000"></A><A NAME="tut-404-handler"></A>
<BR>
3.5 Your Own 404 Handler
</H1>
<P>
In some cases, you may wish to return a 404 (<tt class="constant">HTTP_NOT_FOUND</tt>) or
other non-200 result from your handler. There is a trick here. if you
return <tt class="constant">HTTP_NOT_FOUND</tt> from your handler, Apache will handle
rendering an error page. This can be problematic if you wish your handler
to render it's own error page.
<P>
In this case, you need to set <code>req.status = apache.HTTP_NOT_FOUND</code>,
render your page, and then <code>return(apache.OK)</code>:
<P>
<div class="verbatim"><pre>
from mod_python import apache
def handler(req):
if req.filename[-17:] == 'apache-error.html':
# make Apache report an error and render the error page
return(apache.HTTP_NOT_FOUND)
if req.filename[-18:] == 'handler-error.html':
# use our own error page
req.status = apache.HTTP_NOT_FOUND
pagebuffer = 'Page not here. Page left, not know where gone.'
else:
# use the contents of a file
pagebuffer = open(req.filename, 'r').read()
# fall through from the latter two above
req.write(pagebuffer)
return(apache.OK)
</pre></div>
<P>
Note that if wishing to returning an error page from a handler phase other
than the response handler, the value <code>apache.DONE</code> must be returned
instead of <code>apache.OK</code>. If this is not done, subsequent handler phases
will still be run. The value of <code>apache.DONE</code> indicates that processing
of the request should be stopped immediately. If using stacked response
handlers, then <code>apache.DONE</code> should also be returned in that situation
to prevent subsequent handlers registered for that phase being run if
appropriate.
<P>
<DIV CLASS="navigation">
<div class='online-navigation'>
<p></p><hr />
<table align="center" width="100%" cellpadding="0" cellspacing="2">
<tr>
<td class='online-navigation'><a rel="prev" title="3.4 Now something More"
href="tut-more-complicated.html"><img src='previous.png'
border='0' height='32' alt='Previous Page' width='32' /></A></td>
<td class='online-navigation'><a rel="parent" title="3. Tutorial"
href="tutorial.html"><img src='up.png'
border='0' height='32' alt='Up One Level' width='32' /></A></td>
<td class='online-navigation'><a rel="next" title="4. Python API"
href="pythonapi.html"><img src='next.png'
border='0' height='32' alt='Next Page' width='32' /></A></td>
<td align="center" width="100%">Mod_python Manual</td>
<td class='online-navigation'><a rel="contents" title="Table of Contents"
href="contents.html"><img src='contents.png'
border='0' height='32' alt='Contents' width='32' /></A></td>
<td class='online-navigation'><img src='blank.png'
border='0' height='32' alt='' width='32' /></td>
<td class='online-navigation'><a rel="index" title="Index"
href="genindex.html"><img src='index.png'
border='0' height='32' alt='Index' width='32' /></A></td>
</tr></table>
<div class='online-navigation'>
<b class="navlabel">Previous:</b>
<a class="sectref" rel="prev" href="tut-more-complicated.html">3.4 Now something More</A>
<b class="navlabel">Up:</b>
<a class="sectref" rel="parent" href="tutorial.html">3. Tutorial</A>
<b class="navlabel">Next:</b>
<a class="sectref" rel="next" href="pythonapi.html">4. Python API</A>
</div>
</div>
<hr />
<span class="release-info">Release 3.3.1, documentation updated on January 29, 2007.</span>
</DIV>
<!--End of Navigation Panel-->
</BODY>
</HTML>
|