0

Links I've seen include:

https://akrabat.com/running-slim-4-in-a-subdirectory/

https://discourse.slimframework.com/t/slim-4-httpnotfoundexception/3273/18

and some others

I'm trying to setup a Slim4 project on apache2. But trying to access it gives me the error

PHP Fatal error: Uncaught Slim\Exception\HttpNotFoundException: Not found....

I have my index file in /var/www/html/_projects/work/calc1/src.

The following is my calc.conf in /etc/apache2/sites-available:

<VirtualHost *:80>
    ServerName calc.mrid.local
    ServerAlias calc.mrid.local

    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/_projects/work/calc1/src

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

</VirtualHost>

This is my .htaccess located in src directory

RewriteEngine On
RewriteBase /_projects/work/calc1/src/
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^ index.php [QSA,L]
RewriteRule ^(.*)\.html$ /$1 [L,R=301]

My index.php looks like this:

// use and require statements...

$container = new Container();
AppFactory::setContainer($container);

$container->set('view', function() {
    return \Slim\Views\Twig::create(__DIR__ . '/public/templates');
});

$app = AppFactory::create();

// even without this line it doesn't work
$app->setBasePath("/_projects/work/calc1/src"); 

$app->add(TwigMiddleware::createFromContainer($app));

// my routes....

$app->run();

Has anyone worked with Slim4 on Apache2? If yes, can you please guide me ?

Community
  • 1
  • 1
mrid
  • 5,782
  • 5
  • 28
  • 71
  • Please share definition of some routes that result in a `HttpNotFoundException`. Also please provide full exception message, specially the part that says which URL you were trying to reach that did not exist. – Nima Apr 11 '20 at 21:04
  • I think because DocumentRoot points to `/var/www/html/_projects/work/calc1/src`, you should avoid putting `RewriteBase /_projects/work/calc1/src/` line in .htaccess. Please see [this question](https://stackoverflow.com/questions/21347768/what-does-rewritebase-do-and-how-to-use-it/21348047#21348047). – Nima Apr 11 '20 at 21:19

1 Answers1

0

The src/ directory is actually only meant for the PHP classes and must not be accessible to the web. The apache DocumentRoot should point to the public/ directory which contains your front controller public/index.php. Take a look at the Standard PHP package skeleton. More details about Slim and apache can be found in this Slim 4 Tutorial.

odan
  • 4,757
  • 5
  • 20
  • 49
  • i slightly modified my directory structure. i have my index.php in src and have all assets (css, js, images, templates) in public directory. will i have to change all this ? – mrid Apr 11 '20 at 17:12
  • just checked the skeleton link...it says that src will have the php files, and public will have web server files – mrid Apr 11 '20 at 17:26