簡體   English   中英

Apache mod_rewrite 小寫 REQUEST_URI 的一部分

[英]Apache mod_rewrite lowercase a part of REQUEST_URI

我需要一些幫助來將 url 重寫為小寫。
所以,我有一個 apache 服務器,它是幾個應用程序(一些在 IIS 上,一些在 JBoss 上)的代理。 JBoss 應用程序具有應用程序上下文。
問題是,如果我嘗試通過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 url,將其更改為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,因為我的日志顯示不匹配。

希望這一切都是有道理的。 如果需要更多信息,我會提供。
又是泰。

編輯:
(?<=.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 之外,這就是我想要的所有內容。 所以 /APp uri 將被重寫為 /app 但 /aPp 不會。 我就把這個留在這里,希望我能得到一些反饋。
現在的一個問題是有時加載需要> 15 秒。 而且我只能將其與重寫有關,在最壞的情況下,3 301 重定向...

為 cond 找到正確的正則表達式以僅捕獲應用程序上下文

這個正則表達式將抓取“app/”之后的所有內容:

(?<=app/)[\S]+

現在,每個完整匹配項都可以簡單地輸入到“toLowerCase()”等價函數中。 正則表達式演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM