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

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

慕迪
2023-03-14
问题内容

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

我需要在应用程序内部进行此操作(以免通过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(请参阅javadoc)。

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



 类似资料:
  • 问题内容: Spring MVC(3.0)将带斜杠和不带斜杠的URL视为同一URL。 我需要在应用程序内部进行此操作(以免通过Apache重写规则等)。 一种方法是: 但这通常有两个问题: 太多的控制器 参数问题:编码错误 题 有没有一种方法可以截获所有URL,并且如果它们带有斜杠,可以将它们重定向到相对的地址而不用斜杠? 问题答案: Web配置中所需的所有重写规则 如果没有很多,你可以像这样配置

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

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

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

  • 问题内容: 我在两个不同的计算机上有两个应用程序。在计算机A上的文件中,有一行如下所示: 该网址对和都适用。但是在计算机BI上,有一个类似的url写成: 由于某种原因,计算机B上的可以正常工作,但会挂起并且不会像计算机A上那样直接返回。我是否错过了某些事情?这两个文件对我来说都一样。 问题答案: 检查文件中的设置

  • 问题内容: 我正在尝试将转换为,但是我不断遇到各种错误。我认为这是解决方案: 但这给出了以下异常: 问题答案: 将该参数解释为正则表达式。该是转义字符都 和。你需要对正则表达式进行两次转义: 但是你不必为此使用正则表达式,仅是因为你希望逐个字符地进行精确替换,并且这里不需要模式。因此就足够了: 更新:根据注释,你似乎想在JavaScript上下文中使用字符串。你最好使用它来覆盖更多字符。