Pete Freitag Pete Freitag

Apache mod_rewrite problems with ColdFusion

coldfusionlinux

I have been trying to find the answer to an Apache mod_rewrite problem when using CFMX 6.1. I asked both the cf-linux list, and the cfguru list with no avail (Sean Corfield did suggest using mod_proxy to marshal requests to CF's builtin web server, but that was not ideal for my configuration).

Here's the issue, lets say you want to create search engine safe URLs that don't use file extensions - such as site.com/item/30/ which would redirect to something like: site.com/item.cfm?id=30. So I created a rewrite rule:

RewriteEngine On
RewriteRule ^/item/([0-9]).*$ /item.cfm?id=$1

After creating that rule, and visiting site.com/item/30/ It outputs the CFML source code to item.cfm! When I try something like site.com/item/30.cfm it works! So clearly CFMX is not able to process the file unless I add .cfm to the url. It is interesting to point out that If I use a php file instead of a cfm file, it works fine.

Next I mapped the * url patteren to CfmServlet in the web.xml file. This did nothing but stop php from working.


Like this? Follow me ↯

Apache mod_rewrite problems with ColdFusion was first published on November 11, 2003.

FuseGuard Web App Firewall for ColdFusion

The FuseGuard Web Application Firewall for ColdFusion & CFML is a high performance, customizable engine that blocks various attacks against your ColdFusion applications.

Comments

I see some things in your rewrite rule that looks different then mine, and since mine works fine (although on Windoze), I thought I'd share. Here is one of my rules:

RewriteRule /stores/store/id/([0-9]+)(.*) /stores/store.cfm\?id=$1 [PT]

Notice the escape of the ? on the right hand side? And notice the use of [PT], which I forget what it means. Anyway, give it a try.
by Raymond Camden on 11/11/2003 at 3:29:43 PM UTC
Thanks Ray I'll give it a try, BTW it looks like [PT] stands for pass through: from the docs "This flag forces the rewriting engine to set the uri field of the internal request_rec structure to the value of the filename field. This flag is just a hack to be able to post-process the output of RewriteRule directives by Alias, ScriptAlias, Redirect, etc. directives from other URI-to-filename translators."
by Pete Freitag on 11/11/2003 at 11:36:25 PM UTC
I think adding [R,L] to the RewriteRule might also solve your problem - that forces a redirect to the browser (a 302) so that the request comes back as if the user had typed it in directly (so it should be processed correctly by CF).
by Sean Corfield on 12/08/2003 at 2:26:32 AM UTC
This post is somewhat old, but in case others find it like I did...I got it to work using Ray Camden's suggestion of [PT]. I also added [L] to end up with [PT,L], and this is working for me using Linux and Bluedragon 6.2.
by Chris Bestall on 11/29/2004 at 11:02:28 PM UTC
To echo Chris Bestall, this worked for me (thank God) by adding [PT,L] to the RewriteRule line, but for Apache2/Windows.
by Nick Walters on 01/31/2005 at 2:57:40 PM UTC
SpliFF - The L is not required, it simply means stop processing rules after this one (if it matches), so in many cases you want it, but in some you don't.
by Pete Freitag on 05/21/2005 at 1:26:18 PM UTC
Hey guys -

I'm joining this party *well* after it's ended, I know, but I'm hitting the same mod_rewrite issue. The problem is, my situation includes a twist: I can't use the [PT] flag because I need the CGI variables - specifically SCRIPT_NAME to retain the value from the original request. If I use the PT flag then the SCRIPT_NAME value becomes that of the landing page.

Is there a way to configure mod_rewrite to redirect requests for ^/(.*) to /foo.cfm such that the redirected request doesn't *have* to end in .cfm?

Thanks.
by Rob Wilkerson on 07/05/2006 at 1:05:54 PM UTC
Try

RewriteCond %{SERVER_PORT} !8080
RewriteRule /(.*) %{SERVER_PROTOCOL}://%{REQUEST_URI}:8080/$1

I should note that I haven't tested this at all. It may not be right, but it just might be close enough to get you moving in the right direction.
by Rob Wilkerson on 10/27/2006 at 12:24:08 PM UTC