PHP Slim 4 HttpNotFoundException -- Routes not found when moving application to live server

fasenderos

I have a WordPress website that I have extended with the Slim Framework to provide some custom API. Everything works fine in local, but when I move the application on a live server (SiteGround), if I try to call any of the custom endpoints I get a 404 error Slim\Exception\HttpNotFoundExceptio.

This is my folder structure

In Local the root folder is C:\xampp\htdocs\example\

In remote the root folder is /home/customer/www/example.com/public_html/

api\
  vendor\
  public\
    .htaccess
    index.php
  routes\
    v1\
      autocomplete.php
  .htaccess
  composer.json
  composer.lock
wp-admin
wp-content
wp-includes
... all others WordPress files

In local I was able to call the endpoint http://localhost/example/api/v1/autocomplete, while on remote if I call https://www.example.com/api/v1/autocomplete I get a 404 not found error

code: 404
file: "/home/customer/www/example.com/public_html/api/vendor/slim/slim/Slim/Middleware/RoutingMiddleware.php"
line: 91
message: "Not found."
type: "Slim\Exception\HttpNotFoundException"

As per Slim documentation the Apache mod_rewrite is enabled by the default WordPress .htaccess and AllowOverride All is setted by default on all SiteGround server.

Here is the content of the important Slim files

root\api\.htaccess

RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]

root\api\public\.htaccess

# Redirect to front controller
RewriteEngine On
# RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [QSA,L] 

root\api\public\index.php

<?php
use Selective\BasePath\BasePathMiddleware;
use Slim\Factory\AppFactory;

require_once __DIR__ . "/../vendor/autoload.php";

$app = AppFactory::create();

// Add Slim routing middleware
$app->addRoutingMiddleware();

// Set the base path to run the app in a subdirectory.
// This path is used in urlFor().
$app->add(new BasePathMiddleware($app));

$app->addErrorMiddleware(true, true, true);
 
// PUT ALL ROUTES HERE
require_once "../routes/v1/autocomplete.php";

// Run app
$app->run();

root\api\routes\v1\autocomplete.php

<?php
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;

$app->get("/v1/autocomplete", function (Request $request, Response $response) {
  $params = $request->getQueryParams();
  $payload = array(
    "status" => "error",
    "message" => "missing param 'user_input'",
  );
  if (isset($params["user_input"])) {
    $payload = getSuggestions($params);
  }
  $response->getBody()->write(json_encode($payload));
  return $response
    ->withHeader("Content-Type", "application/json");
});

Thanks in advance

odan

If you run your Slim 4 app in a sub-directory of the webservers DocumentRoot, you need to set the basePath.

Maybe in your case:

$app->setBasePath('/api');

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

CodeIgniter: 404 Page Not Found on Live Server

PHP Slim Framework: The requested URL was not found on this server

NPM live-server: command not found

How to access all routes from Slim 3 php framework?

Error: Class 'Route' not found in routes.php when testing standalone Laravel package using Orchestra Testbench

Error 410 gone after moving from local server to live

Moving routes/web.php file gives class not found error

react router 4 "Not Found" page with nested routes

All requests are not found (404) when the application runs on an external server

Problem in moving my Codeigniter site from live server to localhost

Nuxt application returns 404 when dynamic routes are refreshed (Tomcat Server)

Getting ""Not Found The requested URL was not found on the server" when Flask app server is placed in folder with other files needed for application

codeigniter routes not working without index.php in live server inside default var/www/html folder

Slim 4 get all routes into a controller without $app

Should localStorage persist when application is run via live server?

php Fatal error: Class 'Slim' not found in

How to get Slim PHP Framework routes in a subdirectory on nginx

PHP Slim API 404 not found

Meteor server side routes not being found

PHP Slim - how to have multiple app objects for different routes?

Slim Framework PHP - block routes access to users in some conditions

Moving wordpress site from live server to localhost

Setting PayPal PHP Application live

List all routes with group in php slim 3

SLIM Error :: AuthController not found when SLIM app hosted on server

Application says module not found after moving to directory

Serving Static Files with Slim Application v3 Using Built In PHP Server

Why is the end of a file is not found, when moving the chars?

VScode live server extension no found on MAC