Currently I am using Shared Web Hosting, and uploaded my Laravel project (developed in Laravel 5.1), but I have to type to public with domain name.
eg: abc.com/public/blogpage
My Hosting seller not mapping my domain to laravel public folder so Its mapped to public_html folder.
Is there any way available to remove public word from URL? I tried to keep my files in public_html folder and moved public folder out of `public_html' folder, but no luck,
Kindly guideme
This is recommended for those, who are using shared hosting and not able to remove public from route.
the easiest and simplest way to remove public keyword from Laravel routes is follow these steps.
Put all your files and folder except Public folder, outside
public_html folder, I mean Root folder of your site.
Then grab all files and folder from Public folder and put them
into public_html folder.
once done with this, then create a file (name it, paths.php) into your bootstrap folder (Laravel folder exists in your root folder) copy below code into paths.php file
<?php
return array(
'app' => __DIR__.'/../app',
'public' => __DIR__.'/../public_html',
'base' => __DIR__.'/..',
'storage' => __DIR__.'/../app/storage',
);
Now access your website without public word in URL, if you see error, then try to Hard reload (Ctrl + 5) it. Thats it
Note: This is not the recommended way, in shared hosting, better to ask your Hosting Manager/ re-seller to change your domain mapping on public_html/public instead public_html. and if you are using dedicated, cloud hosting then you can change it by yourself in your Virtual Host file.
Related
Images getting stored in outside public folder and in view, getting called from inside public folder. Everything was working fine in local host. After uploading the project in cpanel i took index.php and htaccess outside public folder. How can i store and call them from same folder? Thank you.
When using Laravel all HTTP Requests has to be hit public directory. But since you are using cPanel all Requests hit directly public_html by default.
You tried to overcome it by moving index.php and .htaccess files to public_html from public_html/public and you broke its structure.
If you have the Administrative (eg: root) access on server, you can solve this by editing your Web server (I assume Apache in your case) to point your domain's requests directly to your Laraval application's public directory.
Usually every Web site in cPanel have separate config files. Their paths something like this:
/var/cpanel/userdata/CPANELUSER/WEBSITEDOMAIN.COM and /var/cpanel/userdata/CPANELUSER/WEBSITEDOMAIN.COM_SSL
In this files there is a documentroot field, it points to public_html directory by default:
documentroot: /home/CPANELUSER/public_html
You need to change it and point it to your application's public directory;
documentroot: /home/CPANELUSER/laravel/project/path/public
After you update both of these files, you need to rebuild your Apache config and restart it;
/usr/local/cpanel/scripts/rebuildhttpdconf
/usr/local/cpanel/scripts/restartsrv_httpd
If those 2 lines don't work, you can try this 2;
/scripts/rebuildhttpdconf
/scripts/restartsrv_apache
If everything done well, all HTTP Requests will hit your Laravel application's public directory as expected.
After that; if your uploaded files stores in public storage, Laravel puts them in to storage/app/public and you need a symlink to it from public directory.
Laravel creates it when you run
php artisan storage:link
Now all your application's requests as your.domain/storage/bla.jpg will give a response from storage/app/public/bla.jpg
And if you don't have administrative access to server you can check this tutorial: How to deploy Laravel 8 project on Cpanel shared hosting
I have a shared hosting with bluehost.com... can I just put my project on that.. like upload public files to public_html and others to root directory and backup MySQL DB and upload it to my shared hosting then edit my .env file... will this actually work with Laravel?
I searched most online resources and it requires ssh access to deploy, but the way I explained should not require that right?
I mean this way you don't have to go throw terminal access right?
I used to do that with WordPress when I want to set everything locally then upload it and edit URLs from the dashboard and stuff...
Yes it would work.
But you have to ensure one thing that, in your cpanel your domain point to the /public folder of laravel project.
Normally cPanel points the http requests to public_html folder, but laravel start from its public folder. You can achieve this by two way.
By pointing your server to straight to public folder
Copying the index.php to the public_html, in that case you have to edit index.php to run the laravel project properly. And I don't recommend this step. Step 1 is lot more easier.
I have used the Laravel 5.1 php framework to build a web application on my local XAMPP server.
Which files or folders should be uploaded on my shared host server?
Should the .env file at root be uploaded?
In this case, if sensitive information such as database connection passwords are in this file, is there a security risk?
All project files should be uploaded under project root \var\www\project (project = all laravel project folder and files and \var\www\project\public is where your domain pointing.
Storage should have write permission.
.env will be under project root and it is not available for public access.
.env won't be accessible for public, if it is then you have a configuration problem with you web server.
Move All the files on xyz(your folder name for which domain/subdomain is mapped) folder
Then follow these steps
Go to public folder
Copy .htacsses file
Paste it in xyz folder
Change server.php to index.php
Enjoy and happy coding
This is working fine with hostgator.in shared hosting.
I've been successful in deploying Laravel 4 applications on shared hosts by simply editing the paths here at /bootstrap/paths.php.
However, Laravel 5 does not have that file. How does Laravel 5 manage paths? I have access to the root directory with public_html. I can upload all the files to root and public directories, but confused where to look for the paths to be maintained?
Laravel 5 is smart enough to detect all it's path. I was missing some of the files during upload. :)
What I did was upload all the files as it is structured and the content of public folder was uploaded into the www directory, that's it!
You can play with creating new Application() in bootstrap/app.php. Its constructor takes argument which tells where is rest of the application related to public/index.php
Currently app.php has
$app = new Illuminate\Foundation\Application(
realpath(__DIR__.'/../')
);
Change the /../ to something else if rest of the application folders for example in ../laravel/ compared to index.html
If you have cPanel in your shared hosting you can try these easier methods before trying to move the Laravel's public folder:
Often you also have an SSH access when you have cPanel on shared hostings, so you can replace the www folder (i.e. the website document root) with a symbolic link to [app]/public, then deploy your Laravel app inside the [app] folder.
If you are deploying on a subdomain, e.g. [app].example.com, usually with cPanel you can choose the document root, then you can simply set it to [app]/public.
I think the two methods above are both easier and safer than moving the public folder. I would keep this as the last option.
Take a look here for some more info: http://blog.netgloo.com/2016/01/29/deploy-laravel-application-on-shared-hosting/
I currently have a basic cpanel hosting account. It has the setup:
/home/mysite/ --> my home directory
/home/mysite/www --> symlink to the next folder
/home/mysite/public_html --> where all my files live
Problem is, with the latest laravel installation I did, I have a website with structure:
/app/ --> appy stuff
/public/ ---> what needs to be exposed
My problem is, I dont want to chuck everything into /home/mysite as there are other folders in there too. Is there a way that I can make the html directory something like:
/home/mysite/public_html/public
This way if people open www.mysite.com, it hits the /public folder. And not the /public_html folder. Is there a way to do this on a basic cpanel hosting solution?
I know this isnt the exact answer you want - but this is how I do it.
You rename public to public_html and there is no need to change any server settings.
Then in your bootstrap/paths.php file change
'public' => __DIR__.'/../public',
to
'public' => __DIR__.'/../public_html',
Then just put the other folders where they need to be. Trying to muck around with cPanel settings, and leaving your Laravel app inside the public_html folder might lead to an issue down the track.