Моя настройка:
- Homestead на Mac OSX с несколькими настроенными сайтами
- У меня есть один сайт, использующий domfit.test в качестве локального домена (автоматически сопоставляется с помощью hostsupdater)
Моя проблема:
Если я vagrant ssh
, а затем share domfit.test
, я получаю случайный сгенерированный URL-адрес ngrok, как и следовало ожидать (http://whatever.ngrok.io),, однако, когда я получаю доступ к этому URL, все мои ресурсы / маршруты имеют префикс http://domfit.test/
(http://domfit.test/login например)
Я пробовал следующее:
- Установка APP_URL в качестве URL-адреса ngrok
php artisan config:clear
php artisan cache:clear
{{ url('login') }}
{{ route('login') }}
Насколько я понимаю, url()
должен возвращать фактический URL, который запрашивал браузер (вместо использования APP_URL
), но он всегда возвращает domfit.test
.
Если я переименую свой сайт в Homestead.yaml
(например, в newdomfit.test
) и переназначу, то это домен, который используют url()
и route()
, независимо от моего APP_URL
. Таким образом, Homestead.yaml
, кажется, форсирует этот домен. Возникает вопрос: как вы на самом деле собираетесь использовать функцию общего доступа?
Я новичок в Laravel, поэтому я не уверен, что все это ожидаемое поведение, и я что-то неправильно понимаю?
Я просто хочу, чтобы мои ссылки и ресурсы в шаблонах работали для локального (domfit.test
), общего (ngrok
) и, в конечном итоге, производства с одним и тем же фрагментом кода. Я беспокоюсь, что мне придется изменить все мои ссылки route()
или url()
, когда я попытаюсь запустить этот сайт в прямом эфире.
РЕДАКТИРОВАТЬ НИЖЕ
Хорошо, я только что попробовал еще раз. Изменено APP_URL
для ngrok
:
Поиск по всей моей кодовой базе domfit.test
, и, похоже, только некоторые случайные файлы сеансов имеют ссылки:
код / domfit / хранение / рамки / сессии /
APP_NAME=DomFit
APP_VERSION=0.01
APP_ENV=local
APP_KEY=XXXX
APP_DEBUG=true
APP_URL=http://04b7beec.ngrok.io
Затем в моем контроллере я делаю это для простой отладки:
echo(url('/login'));
echo(route('login'));
echo($_SERVER['HTTP_HOST']);
echo($_SERVER['HTTP_X_ORIGINAL_HOST']);
Если я использую URL ngrok
, то получаю вывод:
http://domfit.test/login
http://domfit.test/login
domfit.test
04b7beec.ngrok.io
Я не понимаю, как $_SERVER['HTTP_HOST']
возвращает неправильный URL?
Похоже, это может быть связано с этим: https://github.com/laravel/valet/issues/342
ДРУГОЕ РЕДАКТИРОВАНИЕ
Похоже, что это связано с командой share
Homestead:
function share() {
if [[ "$1" ]]
then
ngrok http ${@:2} -host-header="$1" 80
else
echo "Error: missing required parameters."
echo "Usage: "
echo " share domain"
echo "Invocation with extra params passed directly to ngrok"
echo " share domain -region=eu -subdomain=test1234"
fi
}
Который передает опцию -host-header
на ngrok
, которая согласно их документации:
Некоторые серверы приложений, такие как WAMP, MAMP и pow, используют заголовок Host для определения того, какой сайт разработки отображать. По этой причине ngrok может переписать ваши запросы с измененным заголовком Host. Используйте ключ -host-header для перезаписи входящих HTTP-запросов.
Если я использую ngrok
без него, то отображаемый веб-сайт будет другим (потому что у меня есть несколько сайтов, настроенных в Homestead) - поэтому я все еще не уверен, как обойти это. В настоящее время я могу отключить другие сайты, поскольку я не активно их разрабатываю.