Невозможно получить доступ к общей папке Laravel на сервере Live Ubuntu

Проблема: Я не могу получить доступ ко всем файлам в общей папке, но когда я нахожусь в index.php, проблем нет.

Я только что предоставил скриншот index.php, есть некоторый ресурс (изображение, css, js), который не загружен, когда я проверяю элемент, я получаю ошибку 404. Тот же результат, когда я вручную пишу URL-адрес в браузере, я уже проверил на сервере, файл существует.

Эта проблема возникает только на работающем сервере, а в среде разработки эта проблема не возникает. Все файлы одинаковы, потому что я просто клонирую их с локального сервера на свой основной сервер.

Описание сервера и проекта:

  • Убунту 22
  • PHP 8
  • Узел JS 18
  • НПМ 10
  • Я использую ларавель 11

Некоторые части моего .env на живом сервере:

APP_NAME = "Everbright Web Integrated"
APP_ENV=production
APP_KEY=base64:xxx
APP_DEBUG=false
APP_TIMEZONE=UTC
APP_URL=https://192.168.8.210:443

Вещи уже сделаны:

  1. Хранилище php artisan: ссылка -> сбой результата
  2. установите разрешение в общей папке на 777 -> результат сбой
  3. вручную проверить наличие файла -> сбой результата
  4. измените env на Productionn -> сбой результата

Я ожидаю, что при доступе к файлу в общей папке не возникнет ошибка 404.

Директивы Apache в /etc/apache2/sites-available/xxx.conf, применимые к этому виртуальному серверу

DocumentRoot /home/public_html/ewi/public
ServerAdmin xxx
SSLEngine on
SSLCertificateFile /etc/apache2/xxx
SSLCertificateKeyFile /etc/apache2/xxx
<Directory /home/public_html/ewi>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
ErrorLog ${APACHE_LOG_DIR}/demo-error.log
CustomLog ${APACHE_LOG_DIR}/demo-access.log combined

Вот мой файл маршрутов:

<?php
    
    
use Illuminate\Support\Facades\Auth;

use Illuminate\Support\Facades\Route;
    
    
Route::get('/', function () {
        if (Auth::check()) {
            return view('home', ['kdSupp' => Auth::user()->kdsupp]);
        } else {
            return view('welcome');
        }
    });
    
    
Auth::routes();
    
    
Route::get('/list-supp', [App\Http\Controllers\WebRequestController::class, 'listSupplier']);
    
    
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
    

// Surat Jalan
    
Route::get('/surat-jalan/upload', [App\Http\Controllers\SuratJalanController::class, 'index']);
    
Route::get('/surat-jalan/view', [App\Http\Controllers\SuratJalanController::class, 'lihatSuratJalan']);
    
Route::get('/surat-jalan/detail/{id}', [App\Http\Controllers\SuratJalanController::class, 'lihatDetailSuratJalan']);
    
Route::post('/surat-jalan/upload', [App\Http\Controllers\SuratJalanController::class, 'importExcel']);
    
Route::patch('/surat-jalan/ubah', [App\Http\Controllers\SuratJalanController::class, 'ubahSuratJalan']);
    
Route::patch('/surat-jalan/ubah-item', [App\Http\Controllers\SuratJalanController::class, 'ubahItemSuratJalan']);
    
Route::delete('/surat-jalan/hapus', [App\Http\Controllers\SuratJalanController::class, 'hapusSuratJalan']);
    
Route::delete('/surat-jalan/hapus-item', [App\Http\Controllers\SuratJalanController::class, 'hapusItemSuratJalan']);
    
// End Surat Jalan
    
    

//Invoice
    
Route::get('/invoice/upload', [App\Http\Controllers\InvoiceController::class, 'index']);
    
Route::get('/invoice/view', [App\Http\Controllers\InvoiceController::class, 'lihatInvoice']);
    
Route::get('/invoice/detail/{id}', [App\Http\Controllers\InvoiceController::class, 'lihatDetailInvoice']);
    
Route::post('/invoice/upload', [App\Http\Controllers\InvoiceController::class, 'importExcel']);
    
Route::patch('/invoice/ubah', [App\Http\Controllers\InvoiceController::class, 'ubahInvoice']);
    
Route::patch('/invoice/ubah-harga', [App\Http\Controllers\InvoiceController::class, 'ubahHarga']);
    
Route::delete('/invoice/hapus', [App\Http\Controllers\InvoiceController::class, 'hapusInvoice']);
    
Route::delete('/invoice/hapus-sj', [App\Http\Controllers\InvoiceController::class, 'hapusSuratJalan']);
    
//End Invoice

//Faktur Pajak
    
Route::get('/faktur-pajak/upload', [App\Http\Controllers\FakturPajakController::class, 'index']);
    
Route::get('/faktur-pajak/view', [App\Http\Controllers\FakturPajakController::class, 'lihatFakturPajak']);
    
Route::get('/faktur-pajak/detail/{id}', [App\Http\Controllers\FakturPajakController::class, 'lihatDetailFakturPajak']);
    
Route::post('/faktur-pajak/upload', [App\Http\Controllers\FakturPajakController::class, 'importExcel']);
    
Route::patch('/faktur-pajak/ubah', [App\Http\Controllers\FakturPajakController::class, 'ubahFP']);
    
Route::patch('/faktur-pajak/ubah-invoice', [App\Http\Controllers\FakturPajakController::class, 'ubahInvoice']);
    
Route::delete('/faktur-pajak/hapus', [App\Http\Controllers\FakturPajakController::class, 'hapusFP']);
    
Route::delete('/faktur-pajak/hapus-invoice', [App\Http\Controllers\FakturPajakController::class, 'hapusInvoice']);
    
//End Faktur Pajak
    
    

Route::post('/upload-excel', [App\Http\Controllers\UploadController::class, 'prosesUpload']);
    // Download Route
    Route::get('download/template/{filename}', function ($filename) {
        // Check if file exists in app/storage/file folder
        $file_path = storage_path() . '/file/' . $filename;
        if (file_exists($file_path)) {
            // Send Download
            return Response::download($file_path, $filename, [
                'Content-Length: ' . filesize($file_path)
            ]);
        } else {
            // Error
            exit('Requested file does not exist on our server!');
        }
    })
        ->where('filename', '[A-Za-z0-9\-\_\.]+');
    

попробуйте удалить public из URL

Mr. Kenneth 24.07.2024 04:29

уже пробовал, но тот же результат: на этом скриншоте элемента проверки (3-я ошибка, logo.png) URL-адрес запроса отсутствует public

Andikatama 24.07.2024 04:32

Мне кажется, с APP_URL=https://192.168.8.210:443 что-то не так. Если SSL не настроен для приложения, изменение https на http может помочь.

Dishan Sachin 24.07.2024 04:56

да, SSL не настроен, но я только что попробовал изменить https на http, но ничего не происходит, все так же, как и раньше

Andikatama 24.07.2024 05:00

это интересная проблема! вы пытались удалить определение порта 443 в APP_URL в .env? или, возможно, в вашем файле маршрутов есть проблема, которая переопределяет общедоступный путь!

Pooya Behravesh 24.07.2024 07:47

спасибо за предложение, но я уже пытался удалить порт, но все равно уже застрял здесь на пару дней и до сих пор не нашел решения в SO. позвольте мне показать файл маршрутов

Andikatama 24.07.2024 09:44

Вы уверены, что эта проблема каким-либо образом связана с PHP, Laravel или Webmin? Общая папка каким-либо образом обслуживается через PHP?

Nico Haase 24.07.2024 09:53

Судя по содержанию вашего вопроса, доступ к PHP разрешен, а вот статические ресурсы, такие как logo.png, — нет. Если это верно, ваши маршруты не имеют значения — Laravel и .htaccess не влияют на статические файлы. Пока игнорируйте PHP и Laravel, сосредоточьтесь на одном файле, например logo.png. Отправьте запрос по адресу http://<ip>/logo.png и проверьте журналы Apache. Вы уверены, что ваша конфигурация виртуального хоста эффективна при использовании IP-адреса, а не имени хоста?

Don't Panic 24.07.2024 09:55

Я использую Webmin для размещения своего проекта Laravel, и я уверен, что он обслуживается через PHP, потому что в среде разработки этой проблемы не происходит @NicoHaase

Andikatama 24.07.2024 09:57

PHP/Laravel НЕ обслуживает статические файлы, подобные тем, которые находятся в вашей общей папке. Можете ли вы объяснить, что вы подразумеваете под «проверить наличие файла вручную -> сбой результата»?

kris gjika 24.07.2024 10:15
<Directory /home/public_html/ewi> разве это не должно быть то же самое, что и ваш DocumentRoot каталог?
brombeer 24.07.2024 10:26

@krisgjika просто хочу внести ясность: в этой общей папке файл существует, поэтому проблема не в том, что файл отсутствует.

Andikatama 24.07.2024 10:35

@brombeer получит тот же результат, если я добавлю /public в каталог

Andikatama 24.07.2024 10:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
13
86
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Включить модуль mod_rewrite:

sudo a2enmod rewrite
sudo systemctl restart apache2

Проверьте пользователя Apache:

Откройте файл конфигурации Apache /etc/apache2/apache2.conf или /etc/httpd/conf/httpd.conf.

измените владельца общедоступного каталога на www-data

sudo chown -R www-data:www-data /home/public_html/ewi/public

Очистить кэш

php artisan config:cache
php artisan route:cache
php artisan view:cache
Ответ принят как подходящий

Наконец нашел решение этой проблемы. Я просто удаляю эту строку в файле конфигурации Apache.

   # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

Я не знаю, что означает эта строка, я просто следую другому решению SO, но понимаю что-то странное, поэтому удаляю эту строку, и все решено

Другие вопросы по теме