首页 - 信息 - Nginx隐藏跳转(跳转后浏览器URL不变)

Nginx隐藏跳转(跳转后浏览器URL不变)

2023-10-10 09:08

背​​景

一个新的项目,后端使用PHP实现,前端不做路由,而是提供模板,由后端路由控制。

路线::get('pages/{name}',[AppHttpControllersResourceController::class,'getResourceVersion']);

访问以pages/开头的路径时,如http://10.60.10.80/pages/login,后端返回指定模板。出现问题,前端可能会修改浏览器地址,如:http://10.60.10.80/pages/projects/detail?id=1。此时,如果用户刷新页面,就会出现404问题。

所以当访问类似这样的非二级路由的URL时,需要隐式跳转到pages/二级路由,而不需要改变浏览器地址。这可以使用修改后的 Nginx 配置来实现。

计划1

使用重写中断 + proxy_pass,将所有以 /pages 开头的 URI 转发到新路由。

服务器{
听80;
索引index.php index.html;
server_name本地主机;
error_log /var/log/nginx/error.log;
access_log /var/ log/nginx/access.log;
root /home/workspace/project/pms/public;

位置 / {
try_files $uri $uri/ /index.php$is_args$args;
}

位置 ~ /pages {
重写 ^(/pages).*$ rewrite_pages/login break; #break 跳过当前重写阶段(页面不重定向)并继续后续配置
Proxy_pass http://10.60.10.80:80; # p Rewrite_pages/login 重新请求端口 80}} local ~ .php $ {
try_files $ uri = 404;
fastcgi_sp lit_path_info ^(.+.php)(/.+)$;
fastcgi_pass 10.60.10.80:9000;
fastcgi_index index.php;
包括fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root $fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
路线::get('rewrite_pages/{name}',[AppHttpControllersResourceController::class,'getResourceVersion']);

选项2

$request_uri的帮助下,将所有以/pages开头的URI重置为固定的辅助路由,例如/pages/login。 PHP 会将 REQUEST_URI 变量读取为 URI

服务器{
听80;
索引index.php index.html;
server_name本地主机;
error_log /var/log/nginx/error.log通知;
access_log /var /log/nginx/access.log;
root /home/workspace/project/pms/public;
rewrite_log on;

设置 $request_url $request_uri; # 获取 $request_uri 变量并将其分配给 $request_url

if ($request_url ~ ^/pages(.*)$ ) {
set $request_url /pages/login; # 将 $request_url 设置为 /pages/login.它的请求会继续去位置/
}

位置/{nginx隐藏跳转
try_files $uri $uri/ /index.php$is_args$args;
}

位置〜.php $ {try_files $ uri = 404; fastcgi_split_path_info ^(。+。 ;
include fastcgi_params;
fastcgi_param REQUEST_URI $request_url; # 注意,这应该放在fastcgi_params之后,因为fastcgi_params包含REQUEST_URI变量
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}

链接

  • https://www.gsm-guard.net/post/6861726452917174279
  • https://www.gsm-guard.net/developer/article/1751890
  • https://www.gsm-guard.net/zh/read/1484601218