Моя установка:
- 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
ДРУГОЕ ИЗМЕНЕНИЕ
Похоже, это связано с командой Homestead share
:
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), поэтому я все еще не знаю, как это обойти. На данный момент я могу отключить другие сайты, так как я не занимаюсь их активной разработкой.
domfit.test
во всем проекте и посмотрите, где он используется. :) - person emotality   schedule 06.05.2018