Tomcat / mod_rewrite Conflicts with extensionless requests

Posted on 2007-03-19
Medium Priority
Last Modified: 2013-12-02
I have been having too many fruitless conversations with support representatives lately, so I figured maybe I'd have a better chance getting an answer here. This is a complicated problem though; I didn't just set it at 500 points for no good reason (which I sometimes do).

One of my websites is hosted by GoDaddy.com, using their "Deluxe Linux Plan":

I created my whole website in PHP and had it running just fine. I even used some mod_rewrite rules so that certain files could be called without a file extension. For instance, this one:

    RewriteRule ^search$ search.php [NC,L]

You probably all know how that works already, if someone asks for mydomain.com/search it will load up search.php, even though they didn't ask for that.

So everything worked. In fact, everything worked *perfectly*. But then I decided that I wanted to add some special kinds of functionality to my site--in particular, functionality that can be achieved better with Java than with PHP. So I went to the hosting control panel, and clicked the button to "enable support for Java."

This takes a little while to process, and effectively turns on Apache Tomcat. I know very little about Tomcat, just that it's needed for Java in many cases. Ever since I did that, my site doesn't really work anymore.

Any RewriteRules in .htaccess are completely ignored for extensionless requests, and I based a good deal of my site on such requests. So now, if I try to access mydomain.com/search, I get a 404 error instead of seeing the search.php as I should.

I found the article below on the GoDaddy Help Center. It has a long list of file extensions that are handled by Apache, while "files not appearing in this list are processed by Tomcat" and therefore "bypass [the .htaccess] settings." And since my "extensionless" requests obviously are not on this list, it is clear that any corresponding RewriteRules are being bypassed completely.

Is there some fix for this? Some way to tell Apache/Tomcat/Whatever that it should process the htaccess settings for "extensionless" files? And more importantly, is there some concise set of instructions I can tell the support reps to do in order to resolve this issue?

Thanks very much in advance. You don't want to know some of the answers that the support reps gave me. I really appreciate any help you guys can offer.
Question by:soapergem
  • 2
LVL 27

Accepted Solution

mrcoffee365 earned 2000 total points
ID: 18757479
You seem to have the basic answer to your question, which is that the RewriteRules in .htaccess are being  ignored (at least for files without an extension) and they are being passed to Tomcat.

So, since the files are being passed to Tomcat, you could put things to handle those files in Tomcat.

The cleanest Tomcat solution would be to put a filter in that would check the request file name, see that it doesn't have an extension, and respond with a browser redirect to your search.php file.  It's not clear that you have access to Tomcat for that kind of thing at GoDaddy, so you might have to do something else.

You could put a custom 404 error handling page in Tomcat which would check if there's no extension, and redirect to your search.php page.  That might be more possible with GoDaddy, although you would have to check with them.

You could bypass the Tomcat problem by putting an extension on your links (or whatever is producing extension-less requests) and have that extension handled by your .htaccess rewrite rules.

Capturing all requests of a certain type in Tomcat is a little different from the way that Apache handles it, so using Tomcat's web.xml file to capture all files without .jsp or whatever your Java code extensions are (/servlet/* perhaps) is trickier.  You don't really get regular expression manipulation in the web.xml file.  You can define what Tomcat does for
In this case, you would change all your extension-less requests to have /something/ in front of them.  Then you would have a servlet receive any of those requests and redirect the user to search.php.  Or forward, if that's better.

Author Comment

ID: 18757548
Well, after several more futile attempts at pumping any ounces of help out of their support department, I realized this was pretty much a lost cause as far as they were concerned. So I'm in the process of disabling Java, just to get things working again. Thanks for your detailed solution, though, it was very informative!
LVL 27

Expert Comment

ID: 18757877
Well, good luck.

The reason you need Tomcat is that Apache only processes HTML.  It has other apps to process things like PHP, Perl, and Java (JSP or servlets).  The PHP handling is bundled with the Apache release, so it's the easiest for an ISP to turn on for its customers.  You need a servlet engine like Tomcat for JSP or Java servlet pages, which is why Tomcat was turned on.  It's odd that the GoDaddy people decided to send everything not defined in the Apache host to Tomcat, but that probably works for most of their customers.  I imagine it's related to the fact that servlets are often handled with an extension-less name in URLs.

If you decide to turn Java on again, then the best solution for you at GoDaddy is probably to get a default servlet for everything that comes to your site (in this case, all requests that Apache hands off to Tomcat) and have that servlet check the file name.  If there's no extension, in your case you want to forward or redirect the browser to the search.php page.  If there's an extension that means you want Java (.jsp or if you use .do for servlets, then .do), then the main servlet would forward to the right Java page.

Featured Post

Get 10% Off Your First Squarespace Website

Ready to showcase your work, publish content or promote your business online? With Squarespace’s award-winning templates and 24/7 customer service, getting started is simple. Head to Squarespace.com and use offer code ‘EXPERTS’ to get 10% off your first purchase.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

In Solr 4.0 it is possible to atomically (or partially) update individual fields in a document. This article will show the operations possible for atomic updating as well as setting up your Solr instance to be able to perform the actions. One major …
This installment of Make It Better gives Media Temple customers the latest news, plugins, and tutorials to make their Grid shared hosting experience that much smoother.
Watch the video to know how one can repair corrupt Exchange OST file effortlessly and convert OST emails to MS Outlook PST file format by using Kernel for OST to PST converter tool. It can convert OST to MSG, MBOX, EML to access them. It can migrate…
Watch the video of Kernel Migrator for SharePoint, which demonstrate the process easily of migration from SharePoint to SharePoint, OneDrive for Business & Google Drive servers, Public Folder to SharePoint, File Server to SharePoint. The tool has va…
Suggested Courses

624 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question