我的设置:
- 配置了多个站点的 Mac OSX 上的 Homestead
- 我有一个使用 domfit.test 作为本地域的站点设置(使用 hostsupdater 自动映射)
我的问题:
如果我vagrant ssh
,然后share domfit.test
我得到一个随机生成的 ngrok url,正如你所期望的(http://whatever.ngrok.io),但是当我访问这个 URL 时,我所有的资源/路由都带有前缀http://domfit.test/
(http://domfit .test/login例如)
我尝试了以下方法:
- 将 APP_URL 设置为 ngrok URL
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']);
如果我使用ngrok
URL,我得到的输出是:
http://domfit.test/login
http://domfit.test/login
domfit.test
04b7beec.ngrok.io
我不明白如何$_SERVER['HTTP_HOST']
返回错误的网址?
看起来它可能与此有关: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 中配置了多个网站) - 所以我仍然不确定如何解决这个问题。暂时我可以禁用其他网站,因为我没有积极开发这些网站。