skip to Main Content

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>

2

Answers


  1. 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.

    Login or Signup to reply.
  2. 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';
      
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search