Tomcat / mod_rewrite Conflicts with extensionless requests

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, 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 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, 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.
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

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.

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
soapergemAuthor Commented:
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!
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.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Java App Servers

From novice to tech pro — start learning today.

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.