pf » Apache mod_rewrite problems with ColdFusion
Apache mod_rewrite problems with ColdFusion

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.
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.
# Only if request has no extension do we pass to /index.cfm. This means static content like .js,.gif,.html etc.. are handled normally by Apache.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !^.*?\.[^/]{2,5}$ RewriteRule (.*) /index.cfm$1 [PT]
My code retrieves values from both cgi.path_info and cgi.query_string which means it also captures the old non-seo requests without problems.
Note to Pete: Your blog doesn't work with referer turned off in browser.
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !^.*?\.[^/]{2,5}$ RewriteRule (.*) /index.cfm$1 [PT]
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.
I'm attempting to use mod_rewrite to redirect all incoming .cfm requests (index.cfm, default.cfm, login.cfm, etc) to an actual CF server using it's own HTTP server on port 8080.
Anyone willing to offer up a shot? Respond here or by e-mail....I'd appreciate whatever I can get.
PFiero
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.
RewriteEngine on RewriteLog "/var/log/httpd/rewrite.log" RewriteLogLevel 9 RewriteRule (/.*\.cfm.*) http\://10.74.52.35\:8080$1 [P]
# Fix final slash for /dir RewriteCond Host: (.*) RewriteRule ([^.?]+[^.?/]) http\://$1$2/ [R]
# Append default.cfm to any dir RewriteRule ((?!.+\.cfm).*/) $1default.cfm [P]
And by the way if I type the URL with the .cfm page on it.... http://www.example.com/default.cfm for instance, the page comes up now. But if I put just http://www.example.com/ it gives me an error.
<servlet-mapping> <servlet-name>CfmServlet</servlet-name> <url-pattern>*.cfm/*</url-pattern> </servlet-mapping>
Its been a long time since I did this but I believe it was required for redirected URLs that don't end in .cfm. It seems jrun doesn't realise its supposed to be handling it because it looks at the original URL, not the [PT] one.
- Mastering CFQUERYPARAM
- Google Code Search for ColdFusion
- Speaking at CFUNITED 2008
- Getting ColdFusion SQL Statements from SQL Server Trace
- CFSCRIPT Cheatsheet
- 3 New Image Effects for ColdFusion 8
- Googlebot to Submit Web Forms
- ColdFusion 8 Update 1 Fixes some Image Processing Quirks
RSS
add to del.icio.us
Pete Freitag is a software engineer, and web developer located in










