How to redirect URLs with trailing slash to the corresponding ones without it?

前端 未结 7 1662
遥遥无期
遥遥无期 2020-12-05 10:12

Spring MVC (3.0) considers URLs with and without trailing slashes as the same URL.

For example:

http://www.example.org/data/something = http:

7条回答
  •  盖世英雄少女心
    2020-12-05 10:48

    You could list all the rewrite rules you need in your web configuration

    If there aren't many of those, you can configure redirect views like this

    @Configuration
    public class WebConfig extends WebMvcConfigurerAdapter {
      @Override
      public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController("/my/path/", "/my/path")
          .setKeepQueryParams(true)
          .setStatusCode(HttpStatus.PERMANENT_REDIRECT); 
    }
    

    Or you could create a custom HandlerInterceptor

    But interceptors occur before requests are mapped to a specific Controller.action and you've got no way of knowing Controllers and actions in that context.

    All you've got is HTTPServlet API and request+response; so you can:

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

    The answer you don't want to read

    This behavior (URL with trailing slash = URL without it) is perfectly "valid" when considering HTTP. At least this is the default behavior with Spring, that you can disable with useTrailingSlashMatch (see javadoc).

    So using rewrite/redirect rules on the front-end server could a solution; but again, I don't know your constraints (maybe you could elaborate on this and we could figure out other solutions?).

提交回复
热议问题