Q:

apache not serving static content correctly

I have been working on my own mvc framework to further my web app learning, but am having trouble serving static resources.  I am trying to have a single entry point into the application, aka a front controller, so in my project / I have an .htaccess file that redirects all requests to the app/ folder where another .htaccess passes the request uri to index.php (in app/) who delegates the request to the appropriate controllers. 
However, when I try to serve up static content, such as javascripts or cascading style sheets, I still get redirected through app/index.php.  I am also getting "favicon.ico does not exist in /var/www" errors in /var/log/apache2/errors.log (maybe because of symlink to ~/www?).  I do not expect to because of the following .htaccess file in the root directory of my project root:
<IfModule mod_rewrite.c>
  Options -Indexes +FollowSymLinks
  RewriteEngine On

  RewriteBase /

  # ----------------------------------------------------------------------
  # Suppress the "www."  at the beginning of URLs
  # ----------------------------------------------------------------------
  # The same content should never be available under two different URLs - especially not with and
  # without "www."  at the beginning, since this can cause SEO problems (duplicate content). 
  # That's why you should choose one of the alternatives and redirect the other one. 
  RewriteCond %{HTTPS} ! =on
  RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
  RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

  #----------------------------------------------------------------------
  # Route static resources to respective files
  #----------------------------------------------------------------------
  RewriteCond %{REQUEST_FILENAME} ! -f
  RewriteCond public/$0 -f
  RewriteRule ^.+\.(jpg|gif|png|ico|css|js)$ /public/$0 [L]

  #----------------------------------------------------------------------
  # Redirect all other requests to the app folder
  #----------------------------------------------------------------------
  RewriteRule   ^$    app/   [L]
  RewriteRule   (.*)   app/$1 [L]
</IfModule>

and here is the .htaccess in my app/ folder:
<IfModule mod_rewrite.c>
  RewriteEngine On

  # ensure request is not path to filename or directory
  RewriteCond %{REQUEST_FILENAME} ! -f
  RewriteCond %{REQUEST_FILENAME} ! -d

  # redirect all requests to index.php?url=PATHNAME
  RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
</IfModule>

Why can't I serve static content correctly?  This would make sense to me if I wasn't trying to sent all static requests to public/, which is where my css, jpg, png, js, etc files reside.  But I have a RewriteCond rule in there to send the requests for such files to the public dir... Confusing? 

A:

Assuming, from what I understood, that your project structure is the following: 

/
/.htaccess
/app/.htaccess
/app/index.php
/public/static.js (for example)

Here is what I come up with, hoping it'll solve your problem:
the .htaccess in the root folder:
<IfModule mod_rewrite.c>
    Options -Indexes +FollowSymLinks
    RewriteEngine On

    RewriteBase /

    RewriteCond %{HTTPS} ! =on
    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
    RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]

    RewriteRule ^public/.+\.(jpg|gif|png|ico|css|js)$ - [L]
    RewriteRule ^(.*)$ app/$1 [L]
</IfModule>

And the .htaccess in the app folder is unchanged. 
Every request starting with public and being a file with the listed extensions won't be redirected which is done with the dash character. 
The last rule allows to redirect a request to the app/index.php file. 
I think the resulting behaviour is the expected one:

static files in the public directory are not redirected,
files with another extension in the public directory will be
redirected to app/index.php (maybe for some error treatment),
requests not starting with public will be redirected to
app/index.php.