Reputation: 488
I am trying to host a Laravel 9 application on a Cpanel shared host. However, the application keeps returning the below error even when I try to access https://example.com/public
. Also below is my .htaccess file at the root; it used to work perfectly with Laravel 8 but is not working anymore. My problem is I want to access my application just using the domain without /public
or /public.index.php
(e.g., example.com).
Internal server error 500
.htaccess
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Upvotes: 3
Views: 11063
Reputation: 89
How to remove public from url in laravel 9
create a .htaccess
file in root directory
Add this code
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ ^$1 [N]
RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
RewriteRule ^(.*)$ public/$1
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ server.php
create server.php
in the root directory
Add this code
$uri = urldecode(
parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
);
// This file allows us to emulate Apache's "mod_rewrite" functionality from the
// built-in PHP web server. This provides a convenient way to test a Laravel
// application without having installed a "real" web server software here.
if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
return false;
}
require_once __DIR__.'/public/index.php';
Upvotes: 8
Reputation: 45988
RewriteCond %{REQUEST_URI} !^public RewriteRule ^(.*)$ public/$1 [L]
You are missing the slash prefix on the CondPattern !^public
, so this condition will always be successful and repeatedly rewrite the request, potentially causing a rewrite loop (ie. 500 error).
It should be like this instead:
RewriteCond %{REQUEST_URI} !^/public($|/)
RewriteRule ^(.*)$ public/$1 [L]
HOWEVER, you should also have another .htaccess
file with mod_rewrite directives in the /public
subdirectory that manages the routing through your Laravel app, and this should prevent a rewrite-loop.
Upvotes: 4