Apache 将规则重写为仅小写目录

Apache rewrite rule to lowercase directory only

我正在尝试制定一个仅将小写应用于目录(而不是文件名)的重写规则

在 apache 手册的帮助下,我已经走到这一步了:

RewriteEngine On
RewriteMap lc int:tolower
RewriteRule (.*?[A-Z]+.*) ${lc:}

但显然这将应用于整个 uri。我尝试了很多不同的正则表达式和 RewriteConditions,但正则表达式真的让我头疼,想知道是否有人可以提供帮助。

确认一下,我想要这个:

http://www.anything.any/AnYpatH/iN/Site/FiLeNaMe.ExT

重写为:

http://www.anything.any/anypath/in/site/FiLeNaMe.ExT

您可以这样使用:https?:\/\/.+?\/(.*?[A-Z]+.*)\/ 这将匹配其捕获组中的 AnYpatH/iN/Site

可以找到正则表达式的工作示例 here

基本上,您希望将路径和文件名捕获为单独的组。路径将是最后一个斜杠 / 之前的所有内容,而文件名将是之后的所有内容。这可以通过以下正则表达式 (see demo here) 完成:

(.*?[A-Z].*\/)(.*)

然后您需要执行以下操作(如果我的 .htaccess 语法不正确,请见谅):

RewriteEngine On
RewriteMap lc int:tolower
RewriteRule (.*?[A-Z].*\/)(.*) ${lc:}

希望对您有所帮助。