views:

30

answers:

1

Hi there.

I'm working on a Zend Framework project where I've stumbled across a bit of a problem. The problem originates from the fact that modules are 2nd class citizens in Zend Framework. In my project, I'd like for each module to have a folder containing files which are to be accessed from the outside - files such as stylesheets, javascripts and images.

Now, how is this to be done. With a Zend Framework project I have a folder structure which looks like this:

  • application/
    • modules/
      • moduleOne/
        • public/
          • stylesheet.css
      • moduleTwo/
      • moduleThree/
  • public/
    • index.php

The standard .htaccess file located in the public/ folder holds this:

SetEnv APPLICATION_ENV development
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

The way it works, is that the project's apache DocumentRoot is the public/ folder. All requests gets redirected through the index.php file where Zend Framework's router component takes over. Now, I'm by no means an expert with Apache nor mod_rewrite so pardon me if this is just silly. I imagine that I implement an extra step in the existing rewrite rule so that if I request http://project/public/moduleOne/stylesheet.css it will for instance resolve to /var/www/project/application/modules/moduleOne/public/stylesheet.css.

So the steps which need to be done is to check if the first element in the URI is public/ if it is, we take the next segment as the modules name and use that in the path we're trying to resolve to and attempt to serve the file.

Is this at all possible or does anyone have a better suggestion?

Thank you for your time Christian Rasmussen

A: 

With just mod_rewrite you can't request files outside the document root. So the only solution is to use symlink located in document root directory and pointing to the modules directory.

Ololo