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

Regex Apache仅将规则重写为小写目录,regex,apache,mod-rewrite,Regex,Apache,Mod Rewrite,我正在尝试制定一个重写规则,只对目录(而不是文件名)应用小写字母 在apache手册的帮助下,我做到了这一点: RewriteEngine On RewriteMap lc int:tolower RewriteRule (.*?[A-Z]+.*) ${lc:$1} 但显然,这将应用于整个uri。我尝试了很多不同的正则表达式和重写条件,但是正则表达式真的让我头疼,我想知道是否有人能帮我 我想确认一下,我想要: http://www.anything.any/AnYpatH/iN/Site/Fi

我正在尝试制定一个重写规则,只对目录(而不是文件名)应用小写字母

在apache手册的帮助下,我做到了这一点:

RewriteEngine On
RewriteMap lc int:tolower
RewriteRule (.*?[A-Z]+.*) ${lc:$1}
但显然,这将应用于整个uri。我尝试了很多不同的正则表达式和重写条件,但是正则表达式真的让我头疼,我想知道是否有人能帮我

我想确认一下,我想要:

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

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

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


可以找到正则表达式的一个工作示例。

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

然后您需要执行以下操作(如果我没有正确的
.htaccess
语法,请道歉):


希望这有帮助。

试试这个
重写规则^(.*)\/([^\/]+)$${lc:$1}/$2[L]
。如果它可以工作,那么添加
RewriteCond%{REQUEST_URI}[A-Z]
upper这真的很奇怪,它适用于anything.com/MixEDcasE/filename.ext,但不适用于anything.com/ALLUPPER/filename.ext他们推荐的在这种情况下,这大部分是有效的,但出于某种原因,如果目录输入的都是大写,浏览器会在文件名中添加一个尾随斜杠…是的,使用它,再加上一个尾随空格重写规则,它的工作原理是:D。。。谢谢大家
(.*?[A-Z].*\/)(.*)
RewriteEngine On
RewriteMap lc int:tolower
RewriteRule (.*?[A-Z].*\/)(.*) ${lc:$1}$2