Laravel 5.7 - CSS и JS не загружаются с использованием URL :: asset

Я новичок в Laravel. Я устанавливаю laravel 5.7 в своей локальной системе и помещаю js и css в общую папку, но при переходе по URL-адресу моего сайта в браузере сайт не загружает никакие css и js.

Структура сайта:

app
bootstrap
config
database
public
 -css
 -js
 -images
resources
 -views
    -includes
    -layouts
    -pages
routes
tests
vendor
index.php
server.php
.env

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

Вот как я вызываю url: CSS:

{{ URL::asset('css/style.css') }}

JS :

{{ URL::asset('js/query-1.11.1.min.js') }}

При просмотре исходного кода URL-адрес выглядит так:

http://localhost/mysite/css/style.css

Так может ли кто-нибудь помочь мне в этом вопросе?

Заранее спасибо.


person Ankit    schedule 12.12.2018    source источник
comment
Попробуйте использовать {{asset ('css / custom.css')}}   -  person ErDiablo    schedule 12.12.2018
comment
@Ankit Если вы все еще находитесь в режиме разработки, я не вижу причины, по которой вы ненавидите public в URL-адресе? Вы можете создать виртуальный хост на своей машине и начать писать код. Когда вы начнете работать, вы можете просто указать своим доменом саму общую папку. Таким образом, вы вообще никогда не получите public в URL-адресе вашего домена.   -  person nice_dev    schedule 12.12.2018
comment
@ vivek_23 Спасибо за предложение. Теперь я снова поместил .htaccess и index.php в общую папку, и теперь все работает. Еще раз спасибо.   -  person Ankit    schedule 12.12.2018
comment
@Ankit Добро пожаловать. Теперь, по соображениям безопасности, поместите все свои папки, кроме папки public, за пределы вашего public_html и отредактируйте public/index.php, указав правильный путь для $app и т. Д.   -  person nice_dev    schedule 12.12.2018


Ответы (6)


Помощник asset() добавляет базовый URL к указанному вами пути.

Базовый URL-адрес - это расположение index.php (в данном случае: http://localhost/mysite/).

Если вам не нужен index.php внутри / public, вам нужно будет использовать public / внутри вашего пути к активу, например:

asset("public/css/style.css")

То же самое и с файлами js, надеюсь, вы понимаете.

person Sagar Gautam    schedule 12.12.2018
comment
Это будет работать при локальной разработке, но не в производстве, когда он удалит public из url - person Clément Baconnier; 12.12.2018
comment
@cbaconnier не могли бы вы объяснить дальше? пожалуйста. - person Sagar Gautam; 12.12.2018
comment
Мы можем предположить, что @Ankit просматривает localhost/mysite/public, поскольку index.php также находится в общей папке. На производстве вы хотите просматривать example.com, а не example.com/public. Вот почему laravel предоставляет несколько способов обслуживания без public папки, отображаемой в URL-адресе. Смотри мой ответ - person Clément Baconnier; 12.12.2018
comment
@cbaconnier, это хорошо, я не слишком хорошо знаком с производственным сервером. Но вот в чем проблема с URL-адресами файлов css и js, поскольку в маршруте, который мы определяем в наших маршрутах, не будет публичного ключевого слова? - person Sagar Gautam; 12.12.2018
comment
Вы указываете домен example.com на свою папку mysite/public, где находится index.php. Кроме того, asset('public/css/... '); сгенерирует URL example.com/public/css/..., но поскольку ваш домен уже указывает на public, он получит 404, потому что ваши активы на самом деле находятся по адресу example.com/css/... - person Clément Baconnier; 12.12.2018
comment
@cbaconnier так какая строка кода будет в теге ссылки для css? - person Y. Joy Ch. Singha; 11.12.2019
comment
@ Y.JoyCh.Singha вы можете протестировать на основе среды, но это будет работать только на вашей настройке. вызов по умолчанию asset('css/app.css'), и я написал ответ для этого сообщения о том, как правильно настроить локальную среду. - person Clément Baconnier; 11.12.2019

У вас есть 3 возможности

Изменить: я забыл усадьбу

person Clément Baconnier    schedule 12.12.2018

При вырезании файлов .htaccess и index.php в качестве пути должна быть указана общая папка. Попробуйте с этим:

css
{{ URL::asset('public/css/style.css') }}
js
{{ URL::asset('public/js/query-1.11.1.min.js') }}
person Jasim Juwel    schedule 12.12.2018

вы напрямую разместили свои css и js, поэтому вам нужно попробовать эту функцию assets href="{{ assets('')}}".

<link href="{{ asset('css/invoice.css') }}" rel="stylesheet" type="text/css"/>

а также js

<script type="text/javascript" src="{{ asset('js/word.js') }}"></script>
person dhara gosai    schedule 13.12.2018

ДЛЯ JAVASCRIPT:

<script type="text/javascript" src="{{ URL::asset('js/query-1.11.1.min.js') }}"></script>

ДЛЯ CSS:

<link href="{{ URL::asset('css/style.css') }}" rel="stylesheet" type="text/css" >

ПРИМЕЧАНИЕ. Это будет работать, если ваша структура каталогов выглядит следующим образом: /public/css/style.css ИЛИ /public/js/query-1.11.1. min.js

person Udhav Sarvaiya    schedule 12.12.2018
comment
Я пробовал это, но это не работает. На самом деле я удалил .htaccess и index.php из общей папки и поместил эти файлы в корневой каталог для запуска сайта без общедоступных. - person Ankit; 12.12.2018
comment
Вам действительно не следует запускать свой сайт из корня, это открывает доступ к вашему .env файлу - person Jerodev; 12.12.2018

создайте .htaccess в своей корневой папке и напишите это:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^localhost$ [NC]
    RewriteRule ^(.*)$ public/$1 [L,NC] 
</IfModule>
person Mubin    schedule 01.10.2019