1
votes

My Zend framework routing setup is not working as desired. When I access "site", the code under application/modules/default/views/script/index/index.phtml is executed, as desired.

However, when I try "site/home", I get a 404 error page. The apache log shows ( File does not exist: /var/www/site/public/home). In addition, accessing http://site/default/index/index produces the same result. (http://site/index works fine.)

Zend version: 1.10.8

Apache /etc/apache2/apache2.conf:

NameVirtualHost *:80
<VirtualHost *:80>
    DocumentRoot "/var/www/site/public"

    <Directory /var/www/site/public>
        DirectoryIndex index.php
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>

My /var/www/site/public/.htaccess file

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]

My /var/www/site/public/index.php

...
/** Zend_Application */
require_once 'Zend/Application.php';

// Create application, bootstrap, and run
$application = new Zend_Application(
    APPLICATION_ENV,
    APPLICATION_PATH . '/configs/application.ini'
);
$application->bootstrap()
            ->run();

My application.ini file:

[production]
phpSettings.display_startup_errors = 0
phpSettings.display_errors = 0
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
appnamespace = "Application"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.frontController.params.displayExceptions = 0
resources.modules = ""

resources.router.routes.home.route = /home
resources.router.routes.home.defaults.module = default
resources.router.routes.home.defaults.controller = index
resources.router.routes.home.defaults.action = index

resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"

resources.view[] =

autoloaderNamespaces[] = "Site_"

[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1

I have tried moving routes into routes.ini and adding them in application/Bootstrap.php as follows:

   $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/routes.ini', 'production');
   $router = new Zend_Controller_Router_Rewrite();
   $router->addConfig($config, 'routes');

  $r = new Zend_Controller_Router_Route(
      'home/',
      array(
          'controller' => 'index',
          'action'     => 'index'
      )
  );
  $router->addRoute('home', $r);

However, it did not help. I spent the entire day going through the manuals, books, and web forums trying to find the problem to no avail. (I have been following "Zend Framework" by Vikram Vaswani.)

2
Do you know if the 404 error is coming from Apache or ZF? I can't see anything obviously wrong with what you've posted.Tim Fountain

2 Answers

1
votes

My Vhost Directory:

<Directory /var/www/site/public/>
    Options Indexes FollowSymlinks

    php_admin_flag engine on
    php_admin_flag safe_mode off
    php_admin_value open_basedir none
</Directory>
1
votes

Try this apache virtual host config:

<VirtualHost *:80>
    DocumentRoot "/var/www/site/public"
    ServerName mysite

    <Directory "/var/www/site/public">
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>