Avoid public folder of laravel and open directly the root in web server

前端 未结 9 2074
礼貌的吻别
礼貌的吻别 2020-11-29 16:45

I was going through all possible sample on internet to solve this. Still it is an headache.

I just want to avoid the \'public\' in www.mylaravelsite.com/public

相关标签:
9条回答
  • 2020-11-29 17:37

    For Lumen

    Let's think you have a folder path like: /var/www/project/microservice(lumen src)

    /var/www => document root for localhost/

    Target you want: localhost/project/microservice[/foo...] => localhost/project/microservice/public/foo...

    I do this by .htaccess (placed at /project folder) like below:

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_URI} !^.*/public/.*
    RewriteCond %{REQUEST_URI} ^(/[^/]+/[^/]+/).*
    RewriteRule ^[^/]+(.*)$ %1public$1 [L,R=301,P]
    
    0 讨论(0)
  • 2020-11-29 17:45

    Let's assume you have this folder structure in your server

    .cpanel/
    public_html/
    public_ftp/
    ..
    

    And the laravel folder structure is

    app/
    bootstrap/
    public/
    vendor/
    composer.json
    artisan
    ..
    

    You can create a folder name mylaravelsite on your server inline with public_html and public_ftp folder, and copy to it the whole laravel application except the public folder because you will paste all of it contents on the public_html, so you have now:

    .cpanel/
    public_html/
    public_html/packages
    public_html/vendor
    public_html/index.php
    public_html/.htaccess
    ...
    public_ftp/
    mylaravelsite/
    mylaravelsite/app
    mylaravelsite/bootstrap
    ...
    

    On your public_html/index.php change the following line:

    require __DIR__.'/../bootstrap/autoload.php';
    
    $app = require_once __DIR__.'/../bootstrap/start.php';
    

    to

    require __DIR__.'/../mylaravelsite/bootstrap/autoload.php';
    
    $app = require_once __DIR__.'/../mylaravelsite/bootstrap/start.php';
    

    and also don't forget to change /mylaravelsite/bootstrap/paths.php public path, you might use it.

    'public' => __DIR__.'/../public',
    

    to

    'public' => __DIR__.'/../../public_html',
    

    Your site should be running.

    0 讨论(0)
  • 2020-11-29 17:46

    Here is the solution, But Must not do it in real projects, it is just for starter to test Laravel and i have tested it with laravel 5.0 and it is ,cut index.php and .htaccess files from public folder and paste it in the root directory and change these two lines as

    require __DIR__.'/bootstrap/autoload.php';
    $app = require_once __DIR__.'/bootstrap/app.php';
    

    It is Highly Recommended not to use the above method without testing environment, and should use virtual host instead.

    0 讨论(0)
提交回复
热议问题