Search code examples
zend-frameworkdnssubdirectorybase-url

Zend Framework in subdirectory


I'm banging over the wall with this...

I need to establish a zend framework application inside a subdirectory.

i.e. the domain is tricell.ss and I want to use tricell.ss/tricell as application main directory.

Whate've done:

  1. I've setted up in my config (application.ini) the:

    resources.frontController.baseUrl = "/tricell"
    
  2. I've made another var in my config

    baseUrl  = "/tricell"
    
  3. In my Boostrap I've got this:

    $router     = new Zend_Controller_Router_Rewrite();
    $frontController->setRouter($router);
    $frontController->setBaseUrl($this->config->baseUrl);        
    
    $frontController->dispatch();
    
  4. In my layout I'm trying to display image with using:

    $this->baseUrl('/img/btn.png')
    
  5. Here are my vhost configuration:

    <VirtualHost *:80>
    DocumentRoot "/HTDOCS/tricell/tricell/public_html"
    ServerName tricell.ss
    RewriteRule ^$ [L] 
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www.)?tricell.ss$
    RewriteRule ^(/)?$ tricell [L]
    </VirtualHost>
    
  6. here is my .htaccess:

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 problem is when I'm trying to display image nothing happens. When I'm trying to get the image by URL:

http://tricell.ss//tricell/img/btn.png

I'm getting info about wrong controller. How I can make this right? I can (without any problems) make configuration for root domain like tricell.ss and then get image i.e. tricell/ss/img/btn.png, but I want to work on subdirectory, and I can't do that with images. What I am doing wrong here?


Solution

  • I've just manage to resolve my issue... it's quite simple but I was very confused by all this rewriting rules.

    As saying always tricell is confusing let's make some changes to that as well. So to achive something like tricell.ss/sub I would need to:

    1. Put my whole application inside /HTDOCS/tricell/tricell/sub
    2. Change my vhost from this line: DocumentRoot "/HTDOCS/tricell/tricell/public_html" to: DocumentRoot "/HTDOCS/tricell/tricell/"
    3. Insert yet another .htaccess in my /HTDOCS/tricell/tricell/sub directory:

      RewriteEngine On

    RewriteRule ^.htaccess$ - [F]

    RewriteCond %{REQUEST_URI} ="" RewriteRule ^.*$ /sub/ublic_html/index.php [NC,L]

    RewriteCond %{REQUEST_URI} !^/sub/public_html/.$ RewriteRule ^(.)$ /sub/public_html/$1

    RewriteCond %{REQUEST_FILENAME} -f RewriteRule ^.*$ - [NC,L]

    RewriteRule ^public_html/.*$ /sub/public_html/index.php [NC,L]

    This resolved my all issues.