背景
一个新项目,后端使用 PHP 实现,前端不做路由,提供一个模板,由后端路由控制。
Route::get('pages/{name}', [\App\Http\Controllers\ResourceController::class, 'getResourceVersion']); |
当访问路由以 pages/
开头的路径时,如 http://10.60.10.80/pages/login
,后端返回指定模板。出现一个问题,前端可能会修改浏览器地址,如:http://10.60.10.80/pages/projects/detail?id=1
。此时如果用户刷新页面,就会出现 404 问题。
所以当访问类似这种非二级路由的 URL 时,需隐藏式跳转到 pages/
二级路由,且不改变浏览器地址。可使用修改 Nginx 配置实现。
方案一
将所有 /pages
开头 URI 转发到一个新路由,使用 rewrite break
+ proxy_pass
实现。
server { |
Route::get('rewrite_pages/{name}', [\App\Http\Controllers\ResourceController::class, 'getResourceVersion']); |
方案二
借助 $request_uri
,将所有以 /pages
开头的 URI 重新设置为一个固定的二级路由,如 /pages/login
。PHP 将读取 REQUEST_URI
变量作为 URI
server { |