Solved thread

This post is marked as solved. If you think the information contained on this thread must be part of the official documentation, please contribute submitting a pull request to its repository.

public/index/index not found

I've always developed using a WAMP stack and am in the process of learning how to do the same thing in Linux (Ubuntu 14.04). So I suspect my problem is related to how I've set up Apache and/or virtual hosts.

Here's my virutal host file located at /etc/apache2/sites-available/mysite.conf:

<VirtualHost *:80>
    ServerName mysite

    ServerAdmin [email protected]
    DocumentRoot /var/www/mysite

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

    <Directory /var/www/mysite/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>
</VirtualHost>

Whenever I go to http://mysite/index, http://mysite/index/index or http://mysite/index/login I get a 404 error, but not when I go to http://mysite or http://mysite/articles. I verified that both mod_rewrite and Phalcon are enabled, and I made sure 127.0.0.1 mysite was in my hosts file. I have an IndexController and an ArticleController in app/controllers.

Here's the file at /var/www/mysite/.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^$ public/ [L]
    RewriteCond %{REQUEST_URI} !^/forums.*
    RewriteRule (.*) public/$1 [L]
</IfModule>

/var/www/mysite/public/.htaccess:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php?_url=/$1 [QSA,L]
</IfModule>

/var/www/mysite/public/index.php:

<?php

try {

    $config = new Phalcon\Config\Adapter\Ini('../app/config/config.ini');

    $loader = new Phalcon\Loader();

    $loader->registerDirs(array(
        $config->application->controllersDir,
        $config->application->modelsDir
    ))->register();

    $di = new Phalcon\DI\FactoryDefault();

    $di->set('config', $config);

    $di->set('db', function () use ($config) {
        return new Phalcon\Db\Adapter\Pdo\Mysql(array(
            'host' => $config->database->host,
            'username' => $config->database->username,
            'password' => $config->database->password,
            'dbname' => $config->database->dbname,
            'charset' => 'utf8'
        ));
    });

    $di->set('session', function() {
        $session = new Phalcon\Session\Adapter\Files();
        $session->start();
        return $session;
    });

    $di->set('url', function () use ($config) {
        $url = new Phalcon\Mvc\Url();
        $url->setBaseUri($config->application->baseUri);
        return $url;
    });

    $di->set('view', function () use ($config) {
        $view = new Phalcon\Mvc\View();
        $view->setViewsDir($config->application->viewsDir);
        return $view;
    });

    $application = new Phalcon\Mvc\Application($di);

    echo $application->handle()->getContent();

} catch (Phalcon\Exception $e) {
     echo 'PhalconException: ', $e->getMessage();
}

/var/www/mysite/app/controllers/IndexController.php

<?php

use Phalcon\Mvc\Controller;

class IndexController extends Controller
{

    public function indexAction()
    {}

    public function loginAction()
    {}

}

/var/www/mysite/app/config/config.ini:

[database]
host     = localhost
username = root
password = 
dbname   = mysite

[application]
baseUri        = /
controllersDir = ../app/controllers/
modelsDir      = ../app/models/
viewsDir       = ../app/views/