如何在 .htaccess 重写规则中忽略正则表达式映射中的大小写?

问题描述 投票:0回答:1

我现在拥有的是以下内容:

RewriteRule ^([^/]+)/*$ x/$1.html [L,NC,END]

这表明:

/abcd  to  x/abcd.html
/ABCD  to  x/ABCD.html

这在区分大小写的 Unix 文件系统上不太好。

我想要的是将两种变体都指向:

x/abcd.html

如何实现?

Stack Overflow 上也有人问过类似的问题,但似乎没有一个解决 Unix 系统上正则表达式反向引用的问题。

regex apache .htaccess mod-rewrite
1个回答
0
投票

可以使用

RewriteMap
指令来转换 URL 中的文本,而不仅仅是替换它。 Apache httpd 用户指南有一个页面详细介绍了如何使用 RewriteMap,其中包括以下示例:

将 URI 重定向到其自身的全小写版本

RewriteMap lc int:tolower

RewriteRule "(.*)" "${lc:$1}" [R]


第一行将映射“lc”定义为内置“tolower”函数,第二行将该映射应用于重写规则中的反向引用 $1。

因此,在您的示例中,您可以使用:

RewriteMap lc int:tolower RewriteRule ^([^/]+)/*$ x/{lc:$1}.html [L,NC,END]

© www.soinside.com 2019 - 2024. All rights reserved.