2011-11-08 9 views
0

URLの一部を小文字に書き換える必要があります。私はURLのすべての文字を書き換えることができます:URLの一部を書き換えるための正規表現mod_rewrite正規表現

RewriteEngine On 
RewriteMap lc int:tolower 
RewriteCond %{REQUEST_URI} [A-Z] 
RewriteRule (.*) ${lc:$1} [L,R=301] 

私は特別な場合があります。例えば; http://somedomain.com/monitors/services/awe/awe-prod/awr02.awe-prod.a/Read_job_245/Read_job_245を除いて、すべての文字を小文字に書き換え続けたいと思います。 Read_job_245は、大文字または小文字の任意の文字または数字で、常に第6レベルになります。

私はmod_rewrite部分を理解できません。

ご協力いただきありがとうございます。

答えて

0

あなたが意味する場合、これは動作するはずです「私は除いて第六の任意のレベルを書き換えたい」:

RewriteEngine On 
RewriteMap lc int:tolower 
RewriteCond %{REQUEST_URI} [A-Z] 
RewriteCond %{REQUEST_URI} !^((/[^A-Z/]+){5})(/[^/]*[A-Z][^/]*)(/[^A-Z/]+)*/?$ 
RewriteRule ^((/[^/]+){1,5})((/[^/]+)((/[^/]+)*))? ${lc:$1}$4${lc:$5} [L,R=301] 

は(RewriteMap命令がで作業し、そうしないため、「/」で始まるURLに注意してください。 .htaccessで動作しないようです)

最初の5つのマッチと小文字を取り、6番目のままにして、その後はすべて小文字にします。その後のレベル(存在する場合)。あなたが唯一のこれまで6つのレベルに到達する(と第六を書き換えてはいけません)場合

これで十分です。

RewriteEngine オンRewriteMap命令LC int型: するRewriteCondの%{REQUEST_URI} [AZ] するRewriteCond TOLOWER [//^ /] +(^ [(/ [^ AZ /] +){5})(/ [^ /] + ){1,5})(/ [^ /] +)/? $ {LC:$ 1} $ 4 [L、R = 301]

でテスト

:ラインの説明によって

/monitors/services/awe/AWE --> /monitors/services/awe/awe 
/monitors/services/awe/awe-prod/awr02.awe-prod.a/Read_job_245/ --> No change 
/MONITORS/SERVICES/awe/awe-prod/awr02.awe-prod.a/Read_job_245/ --> /monitors/services/awe/awe-prod/awr02.awe-prod.a/Read_job_245/ 
/MONITORS/SERVICES/awe/awe-prod/awr02.awe-prod.a/Read_job_245/AAA/BBB/ --> /monitors/services/awe/awe-prod/awr02.awe-prod.a/Read_job_245/aaa/bbb/ (using 1st rule set) 

ライン:

#Enable mod_rewrite 
RewriteEngine On 
#Create mapping to lower case 
RewriteMap lc int:tolower 
#Match URLs with upper-case characters 
RewriteCond %{REQUEST_URI} [A-Z] 
#Stop rewrite loop when upper-case is in the allowed 6th level 
RewriteCond %{REQUEST_URI} !^((/[^A-Z/]+){5})(/[^/]*[A-Z][^/]*)/?$ 
#Rewrite URL to lower case 
RewriteRule ^((/[^/]+){1,5})(/[^/]+)/? ${lc:$1}$4 [L,R=301]