Laravel+Homestead+nginx 代理:在我的路线中获取正确的 url

Posted

技术标签:

【中文标题】Laravel+Homestead+nginx 代理:在我的路线中获取正确的 url【英文标题】:Laravel+Homestead+nginx proxy: Getting the right url in my routes 【发布时间】:2016-08-01 11:46:52 【问题描述】:

我有一个带有 Laravel 5 项目的专用服务器,并且 Homestead 已正确安装和工作。 我刚刚在 Homestead.yml 中添加了一个 todo.app 行,如下所示:

sites:
    - map: todo.app
      to: /home/vagrant/Code/todo-app/public

为了从外部访问它,我配置了一个 nginx 反向代理,如下所示:

location /todo/ 
        resolver 127.0.0.1;
        proxy_pass http://todo.app:8000/;
        proxy_redirect off;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

然后,我在 hosts 文件中添加了一行,将 todo.app 解析为 127.0.0.1 并安装了 dnsmasq 作为 nginx 的解析器。

如果我浏览 http://dev.mydomain.com/todo,我会得到一切正常工作,除了我的路由:框架将生成的每个 URL 都会忘记子目录。例如,登录 URL 是:http://dev.mydomain.com/login,但应该是 http://dev.mydomain.com/todo/login。更改 .env 文件中的 APP_URL 将无济于事。

【问题讨论】:

我设置了 127.0.0.1 而不是 192.168.10.10,因为我的专用服务器中的网络环境不允许我访问它。 【参考方案1】:

您是否尝试过将所有路线分组并为所有路线添加“待办事项”前缀? 这是一个例子:

Route::group(['prefix' => 'todo'], function()
    Route::get('index','HomeController@index')->name('Homepage');
    ... 
    //The rest of the routes

如果您愿意为此安装修改代码,这可能是您的解决方案。

如果您需要在预定义路由上自定义行为并且正在使用:

Route::auth();

在您的路由文件中,您应该删除该行并创建您自己的路由。您可以使用以下屏幕截图作为指导,查看上一个命令自动为您生成的内容,并使用它来自定义和创建您自己的:

请查看:http://i.stack.imgur.com/ep9cD.png

您可以使用:

php artisan route:list

在您自己的解决方案中复制图像的命令。

【讨论】:

它不起作用。我访问我的 webapp 的 URL 变为 dev.mydomain.com/todo/todo 并且框架生成的 URL 保持不变:dev.mydomain.com/login 你使用的是什么版本的 Laravel? 5.1 还是 5.2?

以上是关于Laravel+Homestead+nginx 代理:在我的路线中获取正确的 url的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Nginx 站点配置文件(Homestead)

Win10搭建Laravel-HomeStead

为啥 laravel homestead 没有运行 Apache

怎么查看homestead自带的php

基于 Laravel 开发博客应用系列 —— Homestead 和 Laravel 安装器

Homestead 和 Laravel 基础理解