我需要一些帮助,将网址重写为小写。
所以,我有一个apache服务器,它是几个应用程序的代理(一些在IIS上,一些在JBoss上)。 JBoss应用程序有 app 上下文
问题是如果我尝试通过https://www.domain.com/App访问应用程序,我会得到404
如果我尝试https://www.domain.com/app一切都很好
如果我捕获所有RewriteRule以小写全部大写,那么我的所有链接和脚本都会得到小写但实际上并不起作用。
在这种情况下,https://www.domain.com/app/SomeFolder/SomeScript.js链接看起来像https://www.domain.com/app/somefolder/somescript.js
我想要的是,如果输入了https://www.domain.com/ ApP /SomeFolder/SomeScript.js网址,则将其更改为https://www.domain.com/ app / SomeFolder / SomeScript.js
我的Apache配置捕获大写字母和小写字母是:
RewriteMap lc int:tolower
RewriteCond %{REQUEST_URI} ^(/[A-Z]+/?)
RewriteRule ^([^/]*/?)(.*)$ ${lc:$1}$2 [R=301,L]
但这不起作用,我似乎无法找到cond的正确正则表达式,只捕获应用程序上下文而不是整个REQUEST_URI,因为我的日志说不匹配。
希望这一切都有道理。如果需要更多信息,我会提供 Ty再次。
编辑:
(?< =。com /)[^ / \ s] +正则表达式捕获了我需要的东西。现在的问题是Apache将使用这个正则表达式
那么,新规则集应该如下所示(?):
RewriteMap lc int:tolower
RewriteRule ((?<=\.com/))([^/\s]+) ${lc:$1}$2 [R=301,L]
EDIT2: 由于我没有得到更多关于此的反馈,我去尝试了其他一些方法,我最终得到了这个:
RewriteCond %{REQUEST_URI} !^/[A-Za-z]+/
RewriteCond %{REQUEST_URI} !^/[^a-z]+/
RewriteRule ^(.*)$ $1/ [R=301]
RewriteCond %{REQUEST_URI} ^/[A-Za-z]+
RewriteCond %{REQUEST_URI} ^/[^a-z]+
RewriteRule ^(.*) ${lc:$1} [R=301]
RewriteCond %{QUERY_STRING} "ReturnUrl="
RewriteRule ^(.*) $1? [R=301]
这是我想要的所有,除了小写的大写URI,当它不以大写字母开头时。因此a / APp uri将被重写为/ app但/ aPp将不会被重写。我会把它留在这里,希望我会得到一些反馈。
现在的一个问题是有时加载需要> 15秒。而且我只能将这与重写有关,在最坏的情况下,有3 301个重定向......
答案 0 :(得分:1)
找到cond的正确正则表达式以仅捕获应用程序上下文
这个正则表达式会抓住“app /”之后的所有内容:
(?<=app/)[\S]+
现在每个完整的匹配可以简单地输入到“toLowerCase()”函数等价物。 regex demo