.htaccess 在mod_rewrite RewriteCond + RewriteRule中“规范化”相邻(非前导、非尾随)正斜杠以创建查询参数

iyfamqjs  于 2022-11-16  发布在  其他
关注(0)|答案(1)|浏览(120)

各位!
我的URL如下所示:

/path/to/renderer/SPECIALKEY.jpg

我想把它们改写成:

/path/to/renderer/?ID=SPECIALKEY

问题是SPECIALKEY可能包含两个相邻的正斜杠,例如:

/path/to/renderer/HELLO/GOOD//BYE.jpg

在StackOverflow中的this answer之后,我修改了.htaccess以包含:

RewriteCond "%{REQUEST_URI}" "^/?path/to/renderer/(.+)\.jpg$"
RewriteRule "^.*$" "/path/to/renderer/?ID=%1" [PT,QSA]

但双斜线仍在“正常化”。
/path/to/renderer/index.php中,如果我输入:

echo $_SERVER[ 'REQUEST_URI' ] . "\n" . $_GET[ 'ID' ] . "\n";

那么对于/path/to/renderer/HELLO/GOOD//BYE.jpg,我将得到:

/path/to/renderer/HELLO/GOOD//BYE.jpg
HELLO/GOOD/BYE

我必须在.htaccess中输入什么才能获得:

/path/to/renderer/HELLO/GOOD//BYE.jpg
HELLO/GOOD//BYE

(with在最后一行使用三个斜线而不是两个斜线)?
提前感谢!

n7taea2i

n7taea2i1#

所以从技术上讲,这并没有回答我的问题,因为似乎没有办法阻止Apache将两个斜杠“标准化”为一个斜杠。
每当真实的的SPECIALKEY包含//时,我就用/_替换它。同样,如果第一个字符是/,我就用_替换它。我把结果放在URL中,而不是真正的SPECIALKEY。
因为_从不出现在真实的SPECIALKEY中,所以当页面接收到修改后的密钥时,它会在将每个_作为实际SPECIALKEY处理之前,将其替换为/

相关问题