如何让路径末尾为变量的URL跳转至默认页面并提取对应参数?
解决方案
核心思路是配置**URL重写(伪静态)**规则,把所有匹配/{游戏ID}格式的请求内部转发到你的默认首页,转发过程保留原始路径,方便后续提取ID参数,全程用户不会感知到跳转也不会出现404错误。
以下是不同部署场景的具体配置方案:
场景1:用Spring Boot托管前端静态资源
直接配置WebMvc路径匹配规则,避免拦截你的原生REST接口的同时转发所有页面请求到首页:
- 新增配置类实现
WebMvcConfigurer接口,重写addViewControllers方法:
@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addViewControllers(ViewControllerRegistry registry) { // 匹配所有非静态资源路径,转发到index.html,不拦截/api前缀的REST接口 registry.addViewController("/{path:[^\\.]*}") .setViewName("forward:/index.html"); // 如需兼容多级路径可额外添加以下配置 registry.addViewController("/**/{path:[^\\.]*}") .setViewName("forward:/index.html"); } }
配置生效后前端可直接从window.location.pathname提取路径中的ID参数。
场景2:前端单独用Nginx部署
修改Nginx站点配置文件,添加重写规则:
server { listen 80; server_name www.mysite.com; root 你的前端静态资源存放目录路径; index index.html; # 先放行后端API请求,不做重写 location /api/ { proxy_pass http://你的Java后端服务地址/; } # 所有不存在的文件/路径统一转发到首页 location / { try_files $uri $uri/ /index.html; } }
修改完成后执行nginx -s reload重载配置即可生效。
场景3:前端用Apache部署
在前端静态资源根目录新建.htaccess文件,写入以下规则:
<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.html$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.html [L] </IfModule>
注意需提前开启Apache的mod_rewrite模块配置才会生效。
配置完成后,前端加载完成后直接拆分当前URL的路径段获取游戏ID,调用后端加入游戏的接口即可完成后续逻辑。
内容的提问来源于stack exchange,提问作者kairos
相关产品推荐
相关产品推荐

