如何将带有斜杠的URL重定向到不带斜杠的相应URL?

Spring MVC(3.0)将带斜杠和不带斜杠的URL视为同一URL。

我需要在应用程序内部进行此操作(以免通过Apache重写规则等)。

一种方法是:

@ResponseStatus(value=HttpStatus.MOVED_PERMANENTLY)

@RequestMapping(value = "/data/something/")

public String dataSomethingRedirect(...) {

return "redirect:/data/something";

}

但这通常有两个问题:

  1. 太多的控制器
  2. 参数问题:编码错误

有没有一种方法可以截获所有URL,并且如果它们带有斜杠,可以将它们重定向到相对的地址而不用斜杠?

回答:

Web配置中所需的所有重写规则

如果没有很多,你可以像这样配置重定向视图

@Configuration

public class WebConfig extends WebMvcConfigurerAdapter {

@Override

public void addViewControllers(ViewControllerRegistry registry) {

registry.addRedirectViewController("/my/path/", "/my/path")

.setKeepQueryParams(true)

.setStatusCode(HttpStatus.PERMANENT_REDIRECT);

}

或者你可以创建一个自定义HandlerInterceptor

但是拦截器是在将请求映射到特定对象之前发生的Controller.action,因此你无法了解该上下文中的Controller和操作。

你所拥有的只是HTTPServlet API和request + response;所以你可以:

response.sendRedirect("http://example.org/whitout-trailing-slash");

考虑HTTP时,此行为(带斜杠的URL =不带URL的URL)完全“有效”。至少这是Spring的默认行为,你可以使用禁用它useTrailingSlashMatch

因此,在前端服务器上使用重写/重定向规则可能是一种解决方案。但是同样,我不知道你的限制(也许你可以对此进行详细说明,我们可以找出其他解决方案?)。

以上是 如何将带有斜杠的URL重定向到不带斜杠的相应URL? 的全部内容, 来源链接: utcz.com/qa/424246.html

回到顶部