Jakob Jakob - 1 month ago 11
Apache Configuration Question

Phalcon PHP Project not mapping (server showing directory view)

I'm in the early stages of migrating a website into a Phalcon PHP framework. However I've stumbled on the first problem.

I've set the Phalcon project up all fine as specified by various tutorials. I've checked to see my server has Phalcon installed which it does and I've uploaded the project into the /www directory. However now when I browse to the URL instead of getting the nice rendered webpage, I literally just get a directory view of my server (Screenshot 1). Even when I dig into the directory of my Phalcon project it still only goes into the directory view (Screenshot 2). It is only when I browse to /phalcon-project/public that it finally recognises and renders the index from the Controllers and Views via the bootstrap index.php in the public directory (Screenshot 3).

Any ideas on why it's not mapping? Note, as you can see in my top level (/www) I have 2 directories; let's call them /phalcon-project and /other-website as I have another site running from there (no PHP frameworks on that site, just a plain boring old static site) my URL www.phalcon-project.com maps to the /www directory and my url www.other-site.com maps to /www/other-site... I don't see that this should be causing an issue, but could it possibly be that, or something else?

Screenshot 1:

Screenshot 1

Screenshot 2:

Screenshot 2

Screenshot 3:

Screenshot 3

Answer

It sounds like you have not set up the virtual host correctly. You can either modify it to make the root /www/public or alternatively utilise a .htaccess file as detailed on the Phalcon website.

https://docs.phalconphp.com/uk/latest/reference/apache.html

So in your case you would have the following in a .htaccess file in your document root. (/www)

<IfModule mod_rewrite.c>
  RewriteEngine on
  RewriteRule  ^$ public/    [L]
  RewriteRule  ((?s).*) public/$1 [L]
</IfModule>

Then the following .htaccess file inside the /www/public directory.

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