I have a Laravel 9 App that I deployed on hostinger
shared hosting.
My site files look like this public_html/laravel-app
.
In public_html file I don't have an index.php
file to change the required bootstrap linked to access the Laravel application.. So all requests currently look like this:
domain/laravel-app/public/index.php/{ROUTE}
.
How can I fix it so it looks like: domain/{ROUTE}
?
First of all I give credit in this to @apokryfos, @user83129 and @andylondon. The solution was a combination of there help.
.htaccess
file for security as @andylondon said but should look like this (added laravel-app before public)
:RewriteEngine on
# serve existing files in the /public folder as if they were in /
RewriteCond %{DOCUMENT_ROOT}public%{REQUEST_URI} -f
RewriteRule (.+) /laravel-app/public/$1 [L]
# route everything else to /public/index.php
RewriteRule ^ /laravel-app/public/index.php [L]
laravel-app/public
to public_html
public_html/index.php
to look exactly like this:<?php
use Illuminate\Contracts\Http\Kernel;
use Illuminate\Http\Request;
define('LARAVEL_START', microtime(true));
/*
|--------------------------------------------------------------------------
| Check If The Application Is Under Maintenance
|--------------------------------------------------------------------------
|
| If the application is in maintenance / demo mode via the "down" command
| we will load this file so that any pre-rendered content can be shown
| instead of starting the framework, which could cause an exception.
|
*/
if (file_exists($maintenance = __DIR__.'/store-api-9/storage/framework/maintenance.php')) {
require $maintenance;
}
/*
|--------------------------------------------------------------------------
| Register The Auto Loader
|--------------------------------------------------------------------------
|
| Composer provides a convenient, automatically generated class loader for
| this application. We just need to utilize it! We'll simply require it
| into the script here so we don't need to manually load our classes.
|
*/
require __DIR__.'/laravel-app/vendor/autoload.php';
/*
|--------------------------------------------------------------------------
| Run The Application
|--------------------------------------------------------------------------
|
| Once we have the application, we can handle the incoming request using
| the application's HTTP kernel. Then, we will send the response back
| to this client's browser, allowing them to enjoy our application.
|
*/
$app = require_once __DIR__.'/laravel-app/bootstrap/app.php';
$kernel = $app->make(Kernel::class);
$response = $kernel->handle(
$request = Request::capture()
)->send();
$kernel->terminate($request, $response);
PS: laravel-app
added in my answer is a custom name in which I named the directory containing my deployed Laravel app in public_html
and can be changed according to each developer.