2012-08-01 5 views
2

특정 단어를 대문자로 바꿔야하지만 완전히 소문자 인 경우 (특정 단어가 무한 루프를 일으키는 것과 일치하는 경우) 특정 단어를 소문자로 다시 작성해야합니다.Apache에서 단어를 소문자로 다시 쓰다

나는이 함께 들어 왔지만을 혼동하고 왜 작동하지 않습니다 : 나 여기에

# /MaTcHeD to matched 
RewriteCond %{REQUEST_URI} ^(?i)matched(\/.*)?$ 
RewriteRule ^[a-z]*[A-Z]+[^\/]*(\/.*)?$ /matched$1 [R=301,L] 

이 URL이 "일치"또는 "일치"또는 "일치"또는 등 '일치'경우라고 그런 다음 URL의 시작 부분에 소문자 ([az])가오고 하나 이상의 대문자 ([AZ]) 뒤에 임의의 "/"문자가오고 그 다음 나머지 URL (옵션 "/"다음에 다른 것). 이러한 조건이 참이면 소문자 "/ matched"로 리디렉션하십시오.

나는 어떤 단어와도 일치하는 많은 해결책을 찾아 보았지만 다른 것들은 대문자로되어 있기 때문에 문제를 일으킬 수 있습니다. 모든 경우에 "일치"만 필요하지만 모두 소문자 인 "일치"로 리디렉션하려면 모두 소문자 여야합니다.

당신은 검사의 몇이를 커버 할 수있는
+0

'RewriteMap'을 사용하지 않는 이유는 무엇입니까? –

+0

RewriteMap을 사용하여 보았습니다.하지만 도움이되지 않은 모든 것이 소문자이거나 대문자로만 표시됩니다. 모든 소문자가 아닌 한 무엇이든 일치시켜야합니다. – Jim

+0

그러면 이전 규칙에서 모두 소문자 인 항목을 일치시키고 lowercasing 규칙을 다시 작성하거나 건너 뛸 수 없습니다. –

답변

1

, 전혀 먼저 확인 소문자되지 않도록 : 경우가 [NC] 플래그를 사용하여 무시 된 경우 동일한 일치 할 경우

RewriteCond %{REQUEST_URI} !^(.*)/matched(.*)$ 

그런 다음 확인 : 이 시점에서

RewriteRule ^(.*)/matched(.*)$ /$1/matched$2 [R=301,L,NC] 

, 당신은 대소 문자 구분없이 matched가 일치하는 것을 알고 있지만 모든 소문자로 리디렉션 할 수 있도록 모든 소문자 아니다. 내가 처음이 필요하지 않도록


나는 htaccess로 수준에서 현재 경기를 사용하고 있습니다 "(. *) /". 그걸 사용하면 효과가 없습니다. 문제는 %{REQUEST_URI} 변수 이 선행 슬래시를 가지고 있다는 것입니다

RewriteCond %{REQUEST_URI} !^/matched(.*)$ 
RewriteRule ^matched(.*)$ /matched$1 [R=301,L,NC] 

을하지만, URI가에 대해 일치시키는 데 사용 : "일치"도메인 후 첫 번째 경로 부분입니다

다음이 시도 RewriteRule이 아닙니다 (그림 참조).

+0

흠 ... RewriteCond % {REQUEST_URI}를 사용했습니다!^일치 (\ /.*)? $와 RewriteRule ^은 일치했습니다 (\ /.*)? $/$ 1 [R = 301, L, NC] 리디렉션 루프. 현재 htaccess 수준의 일치 항목을 사용하고 있으므로 초기 "(. *) /"가 필요하지 않습니다. 그걸 사용하면 효과가 없습니다. "matched"는 도메인 뒤의 첫 번째 경로 부분입니다. – Jim

+0

Apache의 리디렉션 로그는 별 도움이되지 않습니다. 나는 그것을 최대로 설정하고 "^ matched (\ /.*)? $"와 일치한다고 말하지만 다른 것을 말하지는 않습니다. RewriteCond가 매치되었다고 말하는 것도 아닙니다. – Jim

+0

@Jim 죄송합니다. 답변을 업데이트했습니다. 'RewriteCond'에서 앞에 /'가 필요합니다. –

관련 문제