Проблема: Я не могу получить доступ ко всем файлам в общей папке, но когда я нахожусь в index.php, проблем нет.
Я только что предоставил скриншот index.php, есть некоторый ресурс (изображение, css, js), который не загружен, когда я проверяю элемент, я получаю ошибку 404. Тот же результат, когда я вручную пишу URL-адрес в браузере, я уже проверил на сервере, файл существует.
Эта проблема возникает только на работающем сервере, а в среде разработки эта проблема не возникает. Все файлы одинаковы, потому что я просто клонирую их с локального сервера на свой основной сервер.
Описание сервера и проекта:
Некоторые части моего .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
Вещи уже сделаны:
Я ожидаю, что при доступе к файлу в общей папке не возникнет ошибка 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\-\_\.]+');
уже пробовал, но тот же результат: на этом скриншоте элемента проверки (3-я ошибка, logo.png) URL-адрес запроса отсутствует public
Мне кажется, с APP_URL=https://192.168.8.210:443 что-то не так. Если SSL не настроен для приложения, изменение https на http может помочь.
да, SSL не настроен, но я только что попробовал изменить https на http, но ничего не происходит, все так же, как и раньше
это интересная проблема! вы пытались удалить определение порта 443 в APP_URL в .env? или, возможно, в вашем файле маршрутов есть проблема, которая переопределяет общедоступный путь!
спасибо за предложение, но я уже пытался удалить порт, но все равно уже застрял здесь на пару дней и до сих пор не нашел решения в SO. позвольте мне показать файл маршрутов
Вы уверены, что эта проблема каким-либо образом связана с PHP, Laravel или Webmin? Общая папка каким-либо образом обслуживается через PHP?
Судя по содержанию вашего вопроса, доступ к PHP разрешен, а вот статические ресурсы, такие как logo.png, — нет. Если это верно, ваши маршруты не имеют значения — Laravel и .htaccess не влияют на статические файлы. Пока игнорируйте PHP и Laravel, сосредоточьтесь на одном файле, например logo.png. Отправьте запрос по адресу http://<ip>/logo.png и проверьте журналы Apache. Вы уверены, что ваша конфигурация виртуального хоста эффективна при использовании IP-адреса, а не имени хоста?
Я использую Webmin для размещения своего проекта Laravel, и я уверен, что он обслуживается через PHP, потому что в среде разработки этой проблемы не происходит @NicoHaase
PHP/Laravel НЕ обслуживает статические файлы, подобные тем, которые находятся в вашей общей папке. Можете ли вы объяснить, что вы подразумеваете под «проверить наличие файла вручную -> сбой результата»?
<Directory /home/public_html/ewi> разве это не должно быть то же самое, что и ваш DocumentRoot каталог?
@krisgjika просто хочу внести ясность: в этой общей папке файл существует, поэтому проблема не в том, что файл отсутствует.
@brombeer получит тот же результат, если я добавлю /public в каталог






Включить модуль 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, но понимаю что-то странное, поэтому удаляю эту строку, и все решено
попробуйте удалить
publicиз URL