【问题标题】:Apache LocationMatch regex ignores duplicate slashesApache LocationMatch 正则表达式忽略重复的斜杠
【发布时间】:2014-11-12 22:10:19
【问题描述】:

当 URL 的开头有多余的斜杠时,我在 Apache 的 LocationMatch 指令中出现了一种奇怪的行为。根据 Apache 文档,如果我没看错的话,这应该可以:

    <LocationMatch ^/appcontext/(a|b)>

            SetHandler weblogic-handler
            WebLogicCluster apphost01:xxxx,apphost02:xxxx
            WLProxySSL ON

    </LocationMatch>

但是,如果我键入以下 URL,它也会被转发到后端主机:

https:// ///////appcontext/a/

在 Apache 文档中,它明确指出它应该仅将指令应用于 /appcontext/a/,除非我缺少正则表达式的某些内容或 mod_wl 插件存在问题

http://httpd.apache.org/docs/2.2/mod/core.html

"例如, 将匹配请求 URL /abc 但不匹配请求 URL //abc"

有没有人有任何建议来实现这一点?

【问题讨论】:

  • ^/appcontext/(a|b) 也将匹配 ///appcontext/a// 之前的任何 # of appcontext),因为这些被认为是多余的斜杠。它会导致什么问题?
  • 我可能是错的,但这似乎不是一个有效的 URI。 // 之后的部分,即////////appcontext/a/,不是有效的权限组件,也不是有效的路径(因为它以// 开头并且不遵循权限)。 tools.ietf.org/html/rfc3986#section-3
  • 我们有一个带有 /appcontext/a 的 Location 指令的 cookie,浏览器不认为斜杠是多余的(它不会发送 ///appcontext/a/ 的 cookie 仅用于 / appcontext/a/)
  • 那么最好使用重写规则将////app重定向到/app
  • 要对客户端浏览器产生任何影响,您的意思是重定向规则是否正确? AFAIK 重写规则仍会将不正确的 URL 暴露给浏览器,并且 cookie 将不起作用。但是,如果正则表达式不适用于 LocationMatch,它是否适用于 RedirectMatch?

标签: regex apache weblogic slash locationmatch


【解决方案1】:

是的,Apache 确实在重写规则中折叠了多余的斜线。您可以使用THE_REQUEST 变量来匹配和删除多余的斜杠。将其放在根 .htaccess 中:

RewriteEngine On

RewriteCond %{REQUEST_URI} ^(.*?)//+(.*)$
RewriteRule ^ %1/%2 [R=302,L,NE]

【讨论】:

  • 不幸的是,我们没有使用 .htaccess,因为这是一个虚拟路径,但是我在另一篇文章中找到了类似的答案,该答案也适用于 .conf 文件中的 VirtualHost:stackoverflow.com/questions/11781237/… 我可以不测试您的版本,但我会将答案标记为已接受,谢谢您的时间。
  • 感谢您的接受。是的,这个答案确实适用于虚拟路径。
猜你喜欢
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-23
  • 2017-07-10
  • 2023-03-15
  • 2011-03-20
  • 1970-01-01
相关资源
最近更新 更多