'How to create laravel storage symbolic link for production or sub domain system?

When I worked on laravel local development server php artisan storage:link works fine for me. But when I transfer my site to production server then I saw my public storage link was a folder. Then I delete that tried to create a link. I got an error because my app was in the root folder and tried to solve this problem.



Solution 1:[1]

I solved this problem by another command for creating a symbolic link by terminal/cmd/shh:

ln -s /path/to/laravel/storage/app/public /path/to/public/storage

I solved this also Using laravel web route routes/web.php

Route::get('/foo', function () {
    Artisan::call('storage:link');
});

Solution 2:[2]

Another simple way is to run Executing php artisan storage:link Command Programmatically

On routes/web.php

Route::get('/foo', function () {
Artisan::call('storage:link');
});

Solution 3:[3]

assuming that your laravel project "public" directory and "public_html" directory are different. Or your subdomain pointer directory may be different , then use your subdomain pointer directory like "public_html" below given process.

apply command: $ php artisan storage:link

this command will create symlink to "public" directory to your laravel project. not inside the "public_html" . so we need to move the "storage" link to "public_html" directory. for this you can move directly. if it doesn't work then move it using command . go inside the "public" directory and run the below command according to your "public_html" directory location.

$ mv storage /home/yourHostinInfo/domains/domainName/public_html

the path might be different based on your hosting information.

Solution 4:[4]

In case anyone is looking for another flexible solution using php:

Route::get('/link', function () {        
   $target = '/home/public_html/storage/app/public';
   $shortcut = '/home/public_html/public/storage';
   symlink($target, $shortcut);
});

And make any required change to the $target variable and the $shortcut upon your files structure.

You can use the above code inside that web route or inside any other function.

Solution 5:[5]

Creating symbolic link in a web server using SSH

In Laravel documentation, a symbolic link (symlink or soft link) from public/storage to storage/app/public should be created to make files accessible from the web.

(THIS PROCEDURE WILL CREATE SYMBOLIC LINK WITHIN THE LARAVEL PROJECT DIRECTORY)

Here are the steps on how you can create symbolic link in your Linux web server using SSH client:

1. Connect and login to your web server using SSH client (e.g. PUTTY).

2. Link storage/app/public to public/storage using the syntax.

ln -s target_path link_path

Example (in CPanel File Directory)

ln -s /home/cpanel_username/project_name/storage/app/public /home/cpanel_sername/project_name/public/storage

Solution 6:[6]

If you are using a CPANEL web hosting its common for the domain root to be public_html directory which may be an issue as by default Laravel app will try to look for a folder called public in your project root. To solve this open your config/filesystems.php file and change:

/*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/

'links' => [
    public_path('storage') => storage_path('app/public'),
],

to this:

/*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/

'links' => [
    base_path('public_html/storage') => storage_path('app/public'),
],

Note that we have changed the links array value from the default public_path('storage') to our custom base_path('public_html/storage') directory

Solution 7:[7]

I had an issue creating a symlink to a folder located under subdomain, tried everything for almost 3 hours, and no luck. My case was as follow:

  1. The uploads folder is located under subdomain: images.example.com.
  2. I upload images using the root document: $_SERVER['DOCUMENT_ROOT'].'/uploads/
  3. I want to create a symlink in that root document.

Finally, I tried this solution and it works as expected:

ln -s /home/customer/www/images.example.com/public_html/uploads /home/customer/www/example.com/public_html/uploads

Note: I used PuTTY to create that symlink

Solution 8:[8]

I have an account on Hostinger.

I had a big problem with Laravel File Manager, but now I know what was the problem :)

It`s was an issue with a link to storage. My folder public_html had no link but the copy of storage!

  1. Delete this storage or rename it if you want backup :)

  2. Log in to ssh and use command pwd to get the current folder that will help you build a full path.

  3. Use this command:

    ln -s <target_path> <link_path>

In my case this was like:

ln -s /home/u16345434/domains/website.name/storage/app/public /home/u16345434/domains/website.name/public_html/storage

Good Luck :)

Solution 9:[9]

The easiest option is to run the following in a terminal

php artisan storage:link

Solution 10:[10]

All you have to do is access the server through SSH, navigate to the root path where it is your laravel project, for example:

cd /path/to/your/domain/public_html

then navigate to the public directory(laravel project) and delete the storage directory if you have uploaded it...

and go back to the public_html and run the command:

php artisan storage:link

that will get the job done...

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Amir
Solution 3 AL-IMRAN
Solution 4 Ali Ali
Solution 5 Mateus Gonçalves
Solution 6
Solution 7 Jodyshop
Solution 8 Adam Boniecki
Solution 9 Wakil Ahmed
Solution 10 Danhdds