Apache mod_rewrite RewriteCond to by-pass static resources not working

Posted by d11wtq on Stack Overflow See other posts from Stack Overflow or by d11wtq
Published on 2010-04-22T03:30:58Z Indexed on 2010/04/22 3:33 UTC
Read the original article Hit count: 364

I can't for the life of me fathom out why this RewriteCond is causing every request to be sent to my FastCGI application when it should in fact be letting Apache serve up the static resources.

I've added a hello.txt file to my DocumentRoot to demonstrate.

The text file:

ls /Sites/CioccolataTest.webapp/Contents/Resources/static  
hello.txt`

The VirtualHost and it's rewrite rules:

AppClass /Sites/CioccolataTest.webapp/Contents/MacOS/CioccolataTest -port 5065
FastCgiExternalServer /Sites/CioccolataTest.webapp/Contents/MacOS/CioccolataTest.fcgi -host 127.0.0.1:5065
<VirtualHost *:80>
    ServerName cioccolata-test.webdev
    DocumentRoot /Sites/CioccolataTest.webapp/Contents/Resources/static

    RewriteEngine On

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^/(.*)$ /Sites/CioccolataTest.webapp/Contents/MacOS/CioccolataTest.fcgi/$1 [QSA,L]
</VirtualHost>

Even with the -f, Apache is directing requests for this text file (i.e. access http://cioccolata-test.webdev/hello.txt returns my app, not the text file).

As a proof of concept I changed the RewriteCond to:

RewriteCond %{REQUEST_URI} !^/hello.txt

That made it serve the text file correctly and allowed every other request to hit the FastCGI application.

Why doesn't my original version work? I need to tell apache to serve every file in the DocumentRoot as a static resource, but if the file doesn't exist it should rewrite the request to my FastCGI application.

NOTE: The running FastCGI application is at /Sites/CioccolataTest.webapp/Contents/MacOS/CioccolataTest (without the .fcgi prefix)... the .fcgi prefix is only being used to tell the fastcgi module to direct the request to the app.

© Stack Overflow or respective owner

Related posts about mod-rewrite

Related posts about apache