2014-12-19 1 views
8

Использование asset вспомогательной функции, как показано ниже:Laravel: Набор активов без протокола

<script src="{{ asset('/assets/js/jquery-2.1.1.min.js') }}"></script> 

получит

<script src="http://xxx.xxx.com/assets/js/jquery-2.1.1.min.js"></script> 

Есть ли встроенные решения Laravel может позволить ей быть

<script src="//xxx.xxx.com/assets/js/jquery-2.1.1.min.js"></script> 

и правильно отображать с протоколами http и https?

[EDIT]

Я знаю, что Laravel обычно определяет протокол правильно, но когда за балансировки нагрузки, это не так. Поэтому я все еще ищу решение для этого.

+0

ли вы это решение? – kramer65

+0

Вы понимаете, что помощник 'asset' имеет второй аргумент' $ secure'? Это означает, что '{{asset ('/ assets/js/jquery-2.1.1.min.js', true)}}' должен дать вам нужную вам информацию, если вы знаете, что протокол должен быть https. – jszobody

ответ

1

Laravel автоматически изменит URL-адрес актива на протокол, используемый для загрузки сайта.

Если ваш сайт загружен через безопасное соединение, ссылки на ресурсы будут автоматически использовать https.

Update:

Если вы хотите отобразить активы только //, вы можете написать свой собственный HTML macro.

+0

Проблема в том, что если сайт находится за балансировщиком нагрузки, он показывает http-ссылки, где должны быть https-ссылки. – kramer65

0

код, который генерирует URL-активов в Осветите/Routing/UrlGenerator.php

Существует метод forceSchema(), которые могут быть легко изменены, чтобы сделать то, что вам требуется, хотя, если честно эта функция должна быть, вероятно, в Laravel, и, возможно, стоит отправить запрос на перенос на их github.

5

Laravel создает защищенную ссылку только в том случае, если запрос считается защищенным.

У Laravel уже есть способ обработать трафик не httpS как «защищенный», если он исходит от «доверенных прокси».

Вы можете объявить такие доверенных прокси в поставщика приложений услуг, как, что:

Request::setTrustedProxies(array('199.27.128.0/21', 'some other range')); 

Кроме того, убедитесь, что ваш loadbalancer установить следующие заголовки правильно:

Host, X-Forwarded-Host, X-Forwarded-Port, X-Real-IP, X-Forwarded-For and X-Forwarded-Proto 

прокси «Public», такие как cloudflare уже делает это.

В основном, дело в том, что клиентское соединение завершается на одном из интерфейсных серверов (действует как прокси-сервер), поэтому мы должны объявить связь с этого сервера как доверенную, чтобы laravel использовала заголовки с прокси-сервера, а не значения читаются локально.

Выполнение этих функций включения, таких как Request :: isSecure() или Request :: ip(), чтобы вернуть согласованный результат.

0

актива() генерирует URL для актива с использованием текущей схемы запроса (HTTP или HTTPS):

И если вы хотят, чтобы обеспечить внешний URL-адрес, для которого вы не знаете о HTTP или HTTPS, как КДС URL вы можете написать, как показано ниже

<script src="{!! asset('//code.jquery.com/jquery-2.1.1.min.js') !!}"></script> 

Однако вы можете написать, как

<script src="//{!! Request::server ('HTTP_HOST').'/assets/js/jquery-2.1.1.min.js' !!}"></script> 

ИЛИ

<script src="{!! asset('//'.Request::server ('HTTP_HOST').'/assets/js/jquery-2.1.1.min.js') !!}"></script> 
0

Я имел такую ​​же проблему, то я обнаружил, что метод актива() имеет дополнительный второй переменной, истина или ложь для SSL запросов.

Решение, которое я использую следующие:

<link rel="stylesheet" href="{{ asset('assets/bootstrap/3.3.7/css/bootstrap.min.css', !App::isLocal()) }}" /> 

<script type="text/javascript" src="{{ asset('assets/parsley/2.4.4/parsley.min.js', !App::isLocal()) }}"></script> 

Примечание:

!App::islocal() 

Если мое окружение приложение является локальным, SSL не выбран, однако в среде активы будут вызывать через SSL.

+0

Это не то же самое, что '//' – Neat

+0

Yup, true. Однако он будет правильно разрешать запрос через SSL, так как метод актива сообщается о его предоставлении. – Sledmore

0

Я обычно использую

<script src="/assets/js/jquery-2.1.1.min.js"></script> 

без вызова функции активов()

загрязнен я знаю, но в 90% сайтов, которые я работал, это идеальное решение

Смежные вопросы