Laravel 4.2: принудительно отображать URL как HTTP или HTTPS

У нас есть простой маршрут, определенный следующим образом:

Маршрут

// Home
Route::get('/home', [
    'as' => 'home::index',
    'uses' => 'IndexController@home'
]);

Вид

<a href="{{ route('home::index') }}">Home</a>

Нам нужно заставить нашу ссылку/маршрут отображаться как HTTP или, в некоторых случаях, как маршрут HTTPS, например. http://host.domain/home или https://host.domain/home.

Мы не можем использовать URL::forceSchema("http") или URL::forceSchema("https"), так как нам нужно принудительно использовать HTTPS на странице HTTP и HTTP на странице HTTPS. У нас есть мультидоменное приложение. Некоторые домены работают через HTTP, некоторые через HTTPS. Ссылку на другой домен/"раздел приложения" можно разместить везде. Домен, работающий через HTTPS, не может быть доступен через HTTP. Домен, работающий по HTTP, не может быть доступен через HTTPS

Как заставить маршрут отображаться как определенный гипертекстовый протокол?


person lin    schedule 02.08.2018    source источник
comment
@Heyne, прежде чем помечать вопрос как дубликат, внимательно прочитайте вопрос, а также проверьте вопрос, который вы пометили как дублированный. Ваш отмеченный ответ никак не решает эту проблему.   -  person lin    schedule 02.08.2018
comment
Как вы решаете, какую схему следует использовать? Это не похоже на логику, связанную с представлением. Я предполагаю, что вы хотите, чтобы обратный вызов маршрута давал два разных ответа при вызове через http или https, я прав?   -  person Nima    schedule 02.08.2018
comment
@Nima У нас есть мультидоменное приложение. Некоторые домены работают через HTTP, некоторые через HTTPS. Ссылку на другой раздел домена/приложения можно разместить везде. Домен, работающий через HTTPS, не может быть доступен через HTTP. Домен, работающий по HTTP, не может быть доступен через HTTPS.   -  person lin    schedule 02.08.2018
comment
Я думаю, вы можете заставить маршрут обслуживаться только через http/https, который станет свойством маршрута и будет использоваться при создании URL-адреса маршрута. Это решит вашу проблему?   -  person Nima    schedule 02.08.2018
comment
@ Нима, да, это решит нашу проблему.   -  person lin    schedule 02.08.2018


Ответы (1)


В документации Laravel есть раздел под заголовком Принудительное обслуживание маршрута через HTTPS. . В нем не упоминается сгенерированный URL-адрес для маршрута, но я вижу в коде Illuminate\Routing\UrlGenerator эти настройки соблюдаются в методе getRouteScheme. Таким образом, добавление нового значения http/https в массив действий должно помочь:


Принудительно отображать маршрут как HTTP:

Route::get('/home', [
    'as' => 'home::index',
    'uses' => 'IndexController@home',
    'http'
]);

Принудительно отображать маршрут как HTTPS:

Route::get('/home', [
    'as' => 'home::index',
    'uses' => 'IndexController@home',
    'https'
]);

Теперь route('home::index') должен генерировать URL-адрес на основе определенной вами схемы.

person Nima    schedule 02.08.2018