laravel - 无法在 Docker + Laravel PHP + Nginx 中更改基础 URL

laravel - can not change base URL in Docker + Laravel PHP + Nginx

我正在尝试将我的后端网站(包含 API 移动应用程序服务)从 LAMP 迁移到 docker 平台。目前这个 docker 分为 3 个部分(Laravel 应用程序、数据库和 nginx)。至此,网站启动成功,没有报错。

但是,我需要基础 URL 如下所示:

http://backend.example.com/public/

所以,如果我想登录,URL 将是 http://backend.example.com/public/login,还有 API URL 上面的格式如 http://backend.example.com/public/api/v1

我试过的:

  1. .env 中的 APP_URL 值设置为 http://backend.example.com/public/
  2. config/app.php 中的以下设置设置为:
'url' => env('APP_URL', 'https://backend.example.com/public'),
'asset_url' => env('ASSET_URL', null)
  1. 运行 php artisan route:clearphp artisan migrate

但仍然不成功,每次我启动网络浏览器时,URL仍然卡住到:

http://backend.example.com/

http://backend.example.com/login/

http://backend.example.com/api/v1/

等等

有解决上述问题的办法吗?

===补充说明

  1. nginx conf 用于 nginx docker:
server {
    listen 80;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}
  1. 原始基础 URL 在 LAMP 中是 http://backend.example.com/public/,原来我使用的是 LAMP (Apache+PHP+MySQL) 但在当前 Docker 我正在使用 (Nginx + MySQL + php:7.4-fpm),但是因为一个错误,我改变了一些原始基础 url再也无法实现...

  2. 此迁移的引用can be found here

  3. .htaccess 在 apache(旧)配置中:

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_URI} !^public
    RewriteRule ^(.*)$ public/ [L]
</IfModule>

APP_URL 与为实际路由设置基数 URL 没有任何关系,它仅用于设置路由助手附加的基数 URL到。您正在寻找的是路由前缀。在我们进入这段代码之前要注意一件事,尽管您需要确保您始终使用 ROUTE HELPERS 来定义路线、形成动作,基本上任何与 URL 交互的东西。否则你将不得不记住将 public 添加到路径中的任何地方。

在app/Providers/RouteServiceProvider

中打开您的路由服务提供商

寻找map()函数并添加路由前缀

Route::prefix('public')->group(function () {
        $this->mapApiRoutes();

        $this->mapWebRoutes();
});

就是这样。现在,路由服务提供商映射的任何路由都将应用 public/ 前缀。

我的来源只是对如何向任何路由组添加前缀的文档的推断 https://laravel.com/docs/9.x/routing#route-group-prefixes