1) Apache Virtual Host

If we have full access of our server than we can remove index.php from the url using virtual host.

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@localhost

    DocumentRoot /var/www/example.com/public

    <Directory /var/www/example.com/public>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All
      Require all granted
    </Directory>

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

2) .htaccess

We can also remove index.php from using .htaccess. We need to create .htaccess file in our root directory of Laravel project if its not available. Place the below code in .htaccess file.

<IfModule mod_rewrite.c>
   RewriteEngine On 
   RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

3) Using public/index.php file

/*
 * Remove index.php from Url
 */

if (strpos($_SERVER['REQUEST_URI'],'index.php') !== FALSE )
{
    $new_uri = preg_replace('#index\.php\/?#', '', $_SERVER['REQUEST_URI']);
    header('Location: '.$new_uri, TRUE, 301);
    die();
}