【问题标题】:Laravel in a sub-directory using NGINX with preserved routingLaravel 在使用 NGINX 并保留路由的子目录中
【发布时间】:2021-04-11 07:51:43
【问题描述】:

我目前正在尝试在站点的子目录中安装一个 Laravel 应用程序,使用 nginx 将任何流量引导到该应用程序。

我已按照以下 Stackoverflow 问题中的建议进行操作,并且效果很好 Config nginx for Laravel In a subfolder

但是,当使用此方法时,它无需将子目录放在 Laravel 应用程序路由中。

一个例子。

假设我使用以下 nginx 条目将所有对 https://example.com/shop 的请求指向 /shop 子目录...

location /shop {
    alias /var/www/shop/public;
    try_files $uri $uri/ @shop;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

location @shop {
    rewrite /shop/(.*)$ /shop/index.php last;
}

如上所述,这可行,但应用中商店“主页”的路径实际上是

Route::get('/', ShopController::class)->name('shop.home');

虽然我需要它

Route::get('/shop', ShopController::class)->name('shop.home');

由于它在包中,我无法控制所有路由等,还有其他各种原因说明这对我来说更可取。

有没有办法调整上面的 nginx 条目来实现这一点?我尝试了很多东西,但似乎无法让它发挥作用。

提前致谢。

【问题讨论】:

  • Doe 的子域可以吗?我发布了一些示例,您可以尝试...但子域 shop.website.com 可能会解决我们所有的问题 :)

标签: laravel nginx laravel-7


【解决方案1】:

您需要动态设置并更改 fastcgi_param REQUEST_URI $request_url

基本上从 REQUEST_URI 中删除或添加(取决于您的需要)单词 /shop

您可能需要从 fastcgi_params 文件中删除 REQUEST_URI

更多信息和示例可以在

中找到

https://serverfault.com/questions/697569/rewrite-url-with-fastcgi-in-nginx

我没有测试它,所以可能需要在某些行中进行一些更改或更改事物的顺序...

但你可以尝试使用类似的东西

location /shop {
    alias /var/www/shop/public;
    try_files $uri $uri/ @shop;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_param REQUEST_URI /shop$request_uri;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

location @shop {
    rewrite /shop/(.*)$ /shop/index.php last;
}

【讨论】:

  • 不幸的是,这对我不起作用。它仍然指向 / 而不是 /shop
【解决方案2】:

感谢@shushu304提供的线索,我得到了这个工作

我刚刚使用以下内容更新了 REQUEST_URI。

location /shop {
    alias /var/www/shop/public;
    try_files $uri $uri/ @shop;

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param REQUEST_URI /shop$request_uri; <--------
        fastcgi_param SCRIPT_FILENAME $request_filename;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
    }
}

location @shop {
    rewrite /shop/(.*)$ /shop/index.php last;
}

【讨论】:

  • 酷,这也是我想建议的(在考虑了一夜之后:))......我也更新了我的例子,欢迎你投票给我的答案:)
猜你喜欢
  • 2014-08-03
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
  • 2021-12-28
  • 2019-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多