如何一次对 REQUEST_URI 进行多项更改?

如何一次对 REQUEST_URI 进行多项更改?

我正在处理来自专有客户的请求,有时使用反斜杠而不是正斜杠:GET /path\to\the\file.txt,我想将它们全部理顺。

mod_rewrite 可以一次替换一个:

RewriteRule ^(.*)\\+(.*) $1/$2 [QSA]

但我该如何替换全部像 sed 的修饰符那样一次性发生这种情况/g

更新,根据标志 [N] 文档友情链接:@esa-jokinen,下面的简单规则应该“有效”:

RewriteRule "(.*)\\+(.*)" "$1/$2" [N,QSA]

但事实并非如此——%{REQUEST_URI}仍然有反斜杠(甚至没有替换第一个和最后一个)。

我尝试添加noescape旗帜也是:[NE,N,QSA],但是那没有帮助......

我知道,匹配是有效的,因为如果我将 R=301 添加到标志中,我确实会向客户端发送正确的重定向,并且所有反斜杠都会被正确更改。但我不想依赖客户端处理重定向的能力——然而,在内部,%{REQUEST_URI} 保持不变,所有反斜杠都完好无损……

我的 Apache 版本是 2.4.6 —— 这是我们正在使用的 RedHat 为 RHEL7 提供的最新版本。

答案1

应该可以实现如下功能:

RewriteRule ^/([^\\]*)\\([^\\]*\\.*) /$1/$2 [N]
RewriteRule ^/([^\\]*)\\([^\\]*)$ /$1/$2

https://httpd.apache.org/docs/2.4/rewrite/flags.html#flag_n

[N] 标志使规则集从头开始,使用迄今为止的规则集结果作为起点。请谨慎使用,因为它可能会导致循环。

相关内容