Redirect Filter

This is an ISAPI filter for transparent rewriting of URIs. It is useful for the common situation where you wish to retrieve a file from the database and the browser will not display it correctly unless it has the correct extension. It can also provide the browser with the appropriate name for use in saving to disk.

Note that there is a standard method for doing this without altering the URI (the Content-Disposition: header; see RFC2616 for more details. However, this is not respected by older browsers so providing both the Content-Disposition: header and a valid looking path can be beneficial.

Installation

To build from source, you will need to check out the project and related libraries from CVS. See the home page for instructions on CVS, and below for specific build instructions.

Alternatively, click here for a prebuilt binary and sample registry script. Also note that if you don’t have the MSVC7 runtimes, you can find them here.

Configuration

The component reads from the registry key HKLM\SOFTWARE\NPSL\RedirectFilter. The name of each value is the leading part of the URL to map; the actual data is the URL to map to. For example:

Name          Data
/files/       /download/download.asp

When a URL is matched, the name of the original request along with any parameters are passed on. In practical use, you would specify a link like <a href=”/files/somepdf.pdf?dbid=100″/>. This would be rewritten by the filter to /download/download.asp?page=%2Ffiles%2Fsomepdf.pdf&dbid=100. The ASP page (if used in this situation) would probably look something like:

rs = executeDBQuery
Response.AddHeader "Content-Disposition: attachment; " & _
    "filename="filename.pdf"
Response.ContentType = "application/pdf"
' ensure no white space has been written
Response.Clear
Response.BinaryWrite rs("binary_field").Value, _
    rs("binary_field").ActualSize
' ensure no white space follows
Response.End 

Additional redirects can be added with no maximum, but large numbers of rewrites will take a long time to match. Typically this is not necessary as most requests will be rewritten to a small number of pages; the handling being in the query string. (I have not found that query strings prevent older browers from determining the file type by extension).

Leave a Reply

Your email address will not be published. Required fields are marked *