How can I use Apache htaccess to handle case sensitive file names on a website?

I have a client who just moved to a new server and has a ton of file names with various capitalization.  It's a Linux server, so "INDEX.php" and "index.php" are not the same.  I did some research and found I could use .htaccess to rewrite URLs to lowercase.  Bingo!  Here's the current version of what I'm trying:

RewriteEngine On
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} [A-Z]
RewriteRule (.*) ${lc:$1} [R=301,L]

That code results in a 500 server configuration error.  I have read that I also need to change something in httpd.conf, but the documentation on the Apache site is not making sense to me.  Can this all be done just in .htaccess?  If not, exactly what do I need to do in her httpd.conf?  I hate to seem like I'm asking experts to do the work for me, but I'm under a deadline and I learn best by seeing a working example and reverse engineering it in my brain.

I'm really hoping to get this rolling so she won't need to change possibly hundreds of file names.  I have, however, told her and her staff to be sure to use all lowercase file names from now on.

Thanks in advance!

Jeremy
mrcoulsonAsked:
Who is Participating?

[Webinar] Streamline your web hosting managementRegister Today

x
 
Dave BaldwinConnect With a Mentor Fixer of ProblemsCommented:
If you put "CheckSpelling On" in your 'htaccess', it will ignore case in the files names.  And then you don't need the re-write.  At least it worked for me.
0
 
mrcoulsonAuthor Commented:
For real?  I'm trying that now!

Jeremy
0
 
mrcoulsonAuthor Commented:
Bummer!  Ye olde internal server error returns with that one.

Jeremy
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
Dave BaldwinFixer of ProblemsCommented:
Did you remove the 'rewrite' code?
0
 
mrcoulsonAuthor Commented:
Yep.  Well, I commented it away.

# RewriteEngine On
# RewriteMap lc int:tolower
# RewriteCond %{REQUEST_URI} [A-Z]
# RewriteRule (.*) ${lc:$1} [R=301,L]
CheckSpelling On

Jeremy
0
 
Dave BaldwinFixer of ProblemsCommented:
What did you do to get the error?  Can you access a simple HTML file without error?  Remove the 'htaccess' completely and recheck?  I'm trying to establish what does work.  Something must...
0
 
mrcoulsonAuthor Commented:
If I comment those lines out of the .htaccess or rename it to something else, I can access a simple HTML file.  If I leave them uncommented or do not rename the .htaccess file, I get the 500 error.

Jeremy
0
 
Dave BaldwinFixer of ProblemsCommented:
What hosting or server are you on?  What happens if 'htaccess' only has 'CheckSpelling On' and nothing else?  What if it only has '#' in it?
0
 
mrcoulsonAuthor Commented:
The hosting company is Verio.

Just "CheckSpelling On" gives 500 error.

Just a "#" character gives no error.

Jeremy
0
 
Dave BaldwinFixer of ProblemsCommented:
They say they're running Red Hat Enterprise Linux (RHEL).  I can't find anything that says whether they support 'htaccess' or not.  You may need to call them and ask.  Try "ErrorDocument 400 /400.html" in 'htaccess'.  Pretty much your most basic 'htaccess' command.
0
 
mrcoulsonAuthor Commented:
Yeah, that works.  I was playing with it earlier.

Jeremy
0
 
mrcoulsonAuthor Commented:
Also, they already told me they can't help me with the .htaccess file.

Jeremy
0
 
mrcoulsonAuthor Commented:
I found this inside the httpd.conf.

 <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteOptions inherit
    </IfModule>

Jeremy
0
 
mrcoulsonAuthor Commented:
How about an error?  Here's what I found for when I tried "CheckSpelling":

[Sun Aug 15 21:01:04 2010] [alert] [client 71.62.239.244] /path/www/stuff/.htaccess: Invalid command 'CheckSpelling', perhaps mis-spelled or defined by a module not included in the server configuration

Jeremy
0
 
mrcoulsonAuthor Commented:
Oh, and when I use rewritemap, I get that "RewriteMap not allowed here"

Jeremy
0
 
Dave BaldwinFixer of ProblemsCommented:
Here's the Apache page on the subject.  'CheckSpelling' is include but not necessarily loaded.  "CheckCaseOnly on" is another option.  
http://httpd.apache.org/docs/current/mod/mod_speling.html.en

Look for:

LoadModule speling_module modules/mod_speling.so

in httpd.conf.
0
 
mrcoulsonAuthor Commented:
I found it!  I uncommented it!  Nothing changed.  Do I need to restart Apache for config changes to take effect?

Jeremy
0
 
Dave BaldwinFixer of ProblemsCommented:
Yes, restart Apache any time you change httpd.conf or any of the conf files.
0
 
mrcoulsonAuthor Commented:
GOT IT!

Had to do this as root.  Found the module in httpd.conf.  Uncommented.  Restarted httpd.  Added "CheckSpelling On" to .htaccess.  "INDEX.php" now goes right for "index.php".  Beautiful.  Thank you so much.  500 points coming your way.

By the way, any "gotchas" I should be aware of with this?

Jeremy
0
 
Dave BaldwinFixer of ProblemsCommented:
There is one in the documentation.  It will do a one-character spelling correction which you may or may not want.  That's why I noted the  "CheckCaseOnly on" option which only affect capitalization.
0
 
mrcoulsonAuthor Commented:
Ah, I see.  When I try to use CheckCaseOnly, I get the 500 error.  I see it's part of the same module.  Did I miss something?

Jeremy
0
 
Dave BaldwinFixer of ProblemsCommented:
Apparently it's on for Apache 2.2.  See if you have 2.0 or 1.3.
0
 
mrcoulsonAuthor Commented:
2.0.63

Jeremy
0
 
Dave BaldwinFixer of ProblemsCommented:
You'll have to use "CheckSpelling On" then.  It's been working for me on two websites.
0
 
mrcoulsonAuthor Commented:
Sounds good.  Really appreciate your assistance!

Jeremy
0
 
mrcoulsonAuthor Commented:
Thanks for all the help, man!
0
 
Dave BaldwinFixer of ProblemsCommented:
You're welcome and thanks for the points.  Your points just helped put me over 1,000,000 points.
0
All Courses

From novice to tech pro — start learning today.