How to remove public from url in laravel 9

Question

Is it possible to remove “public” from the URL for a Laravel application and just safely upload the entire app folder to my public_html folder on my server? Thanks

Answers ( 1 )

    0
    2023-01-25T13:51:44+00:00

    You could just run

    php artisan serve

    and you won’t have the “public” in the url. It’s not safe to mess around with htaccess.

    0
    2023-01-25T13:57:37+00:00

    In your root Laravel app, create a file called server.php with the following content:

    <?php
    
    $uri = urldecode(
    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
    );
    
    
    if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
    return false;
    }
    
    require_once __DIR__.'/public/index.php';

    Then create a .htaccess file in the same place with the following content

    <IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
    Options -MultiViews
    </IfModule>
    
    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
    </IfModule>
    
    <Files .env>
    order allow,deny
    Deny from all
    </Files>

    Now you should be able to access your site without the “public” in the url. But as Boon said, it’s not the intended way to use Laravel.

    You should also check if you can access your .env file like so: yoursite.com/.env

    You should get a 404 or access forbidden error.

    Best answer

Leave an answer