I've deployed a zend application on a local server(ubuntu), the default page works fine, but all the rest of application throw the 404 not found page.
my index.php
// Define path to application directory defined('APPLICATION_PATH')
|| define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));
// Define application environment defined('APPLICATION_ENV')
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
// Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array(
realpath(APPLICATION_PATH . '/../library'),
get_include_path(), )));
/** 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();
application.ini
[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.params.displayExceptions = 0
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts/"
resources.frontController.moduleDirectory = APPLICATION_PATH "/modules"
resources.modules = ""
resources.frontController.params.prefixDefaultModule = "1"
resources.db.adapter = mysqli
resources.db.params.host = localhost
resources.db.params.username = root
resources.db.params.password = ""
resources.db.params.dbname = assalam
[staging : production]
[testing : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
[development : production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
resources.frontController.params.displayExceptions = 1
_initAutoLoader function in the Bootsrap file
protected function _initAutoLoad(){
$modelLoader = new Zend_Application_Module_Autoloader(array(
'namespace'=>'',
'basePath'=>APPLICATION_PATH . '/modules/default'
));
if(Zend_Auth::getInstance()->hasIdentity()){
Zend_Registry::set('role',Zend_Auth::getInstance()->getStorage()->read()->role);
}else {
Zend_Registry::set('role','Visiteurs');
}
$this->_acl = new Model_UsersAcls();
$this->_auth = Zend_Auth::getInstance();
$fc = Zend_Controller_Front::getInstance();
$fc->registerPlugin(new Plugin_AccessCheck($this->_acl));
return $modelLoader;
}
the apache2.conf contains
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
the htaccess file contains
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$
RewriteRule ^(.*)$ - [E=BASE:%1]
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L]
the virtual host code
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/
<Directory /var/www/>
Options +FollowSymlinks +SymLinksIfOwnerMatch
AllowOverride All
</Directory>
</VirtualHost>
Do you have your htaccess file set up?
Does your server allow htaccess files to be run (check that AllowOverride is set to All in your server configuration file).
As an example, here is the htaccess file from one of my projects:
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^(.*)/(.*)$ index.php [NC,L]
RewriteRule ^(.*)/(.*)/(.*)$ index.php [NC,L]
RewriteRule ^(.*)/(.*)/(.*)/(.*)$ index.php [NC,L]
RewriteRule ^.*$ index.php [NC,L]
RewriteCond %{REQUEST_FILENAME} !^(.*)\.css$
RewriteCond %{REQUEST_FILENAME} !^(.*)\.js$
RewriteCond %{REQUEST_FILENAME} !public/gateway/(.*)$
RewriteRule ^.*$ - [NC,L]
How did you deploy it? You used Zend Server Deployment? Have you setup a virtual host? What URL are you calling? What is the projects path?
Please check if you have a virtual host, if not create something like this example:
<VirtualHost *:80>
ServerName helloWorld.dev
DocumentRoot /Users/myuser/Sites/HelloWorld/public
<Directory /Users/myuser/Sites/HelloWorld/public>
Options +FollowSymlinks +SymLinksIfOwnerMatch
AllowOverride All
</Directory>
</VirtualHost>
Also on your hosts files
127.0.0.1 helloWorld.dev
I would recomend to check the folder permissions too
myuser:HelloWorld myuser$ ll
total 0
drwxr-xr-x 8 myuser staff 272B Jan 6 11:54 application
drwxr-xr-x 3 myuser staff 102B Jan 6 11:54 docs
drwxr-xr-x 4 myuser staff 136B Dec 28 20:54 library
drwxr-xr-x 4 myuser staff 136B Jan 6 11:54 public
drwxr-xr-x 6 myuser staff 204B Jan 6 11:54 tests
myuser:HelloWorld myuser$ pwd
/Users/myuser/Sites/HelloWorld
myuser:HelloWorld myuser$
Add the following definition on the file /etc/apache2/users/myuser.conf. If this file don't exist create it
<Directory "/Users/myuser/Sites/">
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>