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
我试过的:
- 将
.env
中的 APP_URL
值设置为 http://backend.example.com/public/
- 将
config/app.php
中的以下设置设置为:
'url' => env('APP_URL', 'https://backend.example.com/public'),
'asset_url' => env('ASSET_URL', null)
- 运行
php artisan route:clear
和 php artisan migrate
但仍然不成功,每次我启动网络浏览器时,URL仍然卡住到:
http://backend.example.com/
http://backend.example.com/login/
http://backend.example.com/api/v1/
等等
有解决上述问题的办法吗?
===补充说明
- 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;
}
}
原始基础 URL 在 LAMP 中是 http://backend.example.com/public/
,原来我使用的是 LAMP (Apache+PHP+MySQL) 但在当前 Docker 我正在使用 (Nginx + MySQL + php:7.4-fpm),但是因为一个错误,我改变了一些原始基础 url再也无法实现...
此迁移的引用can be found here。
.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
我正在尝试将我的后端网站(包含 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
我试过的:
- 将
.env
中的APP_URL
值设置为http://backend.example.com/public/
- 将
config/app.php
中的以下设置设置为:
'url' => env('APP_URL', 'https://backend.example.com/public'),
'asset_url' => env('ASSET_URL', null)
- 运行
php artisan route:clear
和php artisan migrate
但仍然不成功,每次我启动网络浏览器时,URL仍然卡住到:
http://backend.example.com/
http://backend.example.com/login/
http://backend.example.com/api/v1/
等等
有解决上述问题的办法吗?
===补充说明
- 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;
}
}
原始基础 URL 在 LAMP 中是
http://backend.example.com/public/
,原来我使用的是 LAMP (Apache+PHP+MySQL) 但在当前 Docker 我正在使用 (Nginx + MySQL + php:7.4-fpm),但是因为一个错误,我改变了一些原始基础 url再也无法实现...此迁移的引用can be found here。
.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