当前位置: 首页 > 面试题库 >

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

微生自怡
2023-03-14
问题内容

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

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



 类似资料:
  • 问题内容: Spring MVC(3.0)将带斜杠和不带斜杠的URL视为同一URL。 例如: http://www.example.org/data/something/ 我需要用斜杠重定向URL http://www.example.org/data/something/ 到没有它的URL: http://www.example.org/data/something 我需要在应用程序内部进行此操

  • 本文向大家介绍Python中的左斜杠、右斜杠(正斜杠和反斜杠),包括了Python中的左斜杠、右斜杠(正斜杠和反斜杠)的使用技巧和注意事项,需要的朋友参考一下 首先,"/"左倾斜是正斜杠,"\"右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows用反斜杠,但是现在Windows (一)目录中的斜杠们 python读文件需要输入的目录参数,列出以下

  • 问题内容: 我在两个不同的计算机上有两个应用程序。在计算机A上,文件中的行如下所示: 该网址对和都适用。但是在计算机BI上,有一个类似的url写成: 出于某种原因,计算机B上的/可以正常工作,但会挂起并且不会像计算机A上那样直接返回。这两个文件看起来和我一样。 问题答案: 检查settings.py文件中的设置 django文档中的更多信息

  • 我有以下路径:,我想将其转换为: 我试图将上面的路径附加到这个路径:with但是当我将两个字符串附加在一起时,这是输出: 下面是有问题的代码: 由于斜杠的原因,附加的路径未被视为文件夹。有什么帮助吗? 编辑:只是澄清一下,完整路径(两个附加字符串)实际上是一个文件夹。

  • 许多发现都是针对python2的,我的例子是python3: 我需要把双背斜线换成单背斜线 这篇文章中的“接受答案”python3用单反斜杠替换双反斜杠在这里不起作用: 那么问题出在哪里呢?非常感谢。 [更新]: 由于@ShadowRanger的回复,所以如果在替换操作后打印字符串,它是预期的,但是,在我的情况下,我需要连接替换后生成另一个变量(conn_str),正如你所看到的,它仍然显示双反斜