2012-12-04 2 views
3

요청의 일부가 255 자보다 짧을 경우 (캐시와 255 자의 파일 이름 제한이 리눅스에서 발생해야 함) 아파치가 특정 재 작성을 건너 뛰도록합니다.htaccess 질의 문자열의 일부 길이를 확인하십시오.

나는이 작성했습니다 :

RewriteCond %{QUERY_STRING} "utm_campaign" 
RewriteCond %{QUERY_STRING} "utm_medium" 
RewriteCond %{QUERY_STRING} ^(.*\/)([^\/\n]{0,255})$ 
RewriteRule .* - [S=2] 

을 그리고 나는 URL (q=path/to/page?utm_campaign=xxx&utm_medium=xxx)에 대한 정규식 테스트이 후이 규칙이 여전히 실행 얻을 때문에 QUERY_STRING 변수가 다른 콘텐츠를 갖고있는 것 같아요하지만 일치 . 일치해야하는 부분은이 경우 page?utm_campaign=xxx&utm_medium=xxx (및 이후의 모든 것)이 값이 255 자보다 짧으면 다음 2 개의 다시 쓰기 규칙을 건너 뛸 수 있습니다.

나는 Drupal 6 btw를 사용하고 있습니다.

+1

귀하의 규칙은 정확합니다. 문제는 다른 것입니다. 귀하의 진술에 약간의 혼란이 있습니다 ...주의하시기 바랍니다. mod_rewrite에서 사용 가능한 아파치 변수의 내용은 다음과 같습니다 : 액세스 된 URL이 'http://www.example.com/path/file.ext?var= 1 & var2 = 2' ...'% {REQUEST_URI}'는'/ path/file.ext'이고,'% {QUERY_STRING}'은'var = 1 & var2 = 2' ... 그래서 여러분의 예제에서'page?' 변수의 일부가 아닙니다 ... 어떤 차이가 있거나 문제를 해결하는 경우 확실하지 않습니다. –

+0

이것은 실제로 문제의 핵심이었습니다. RewriteCond % {REQUEST_URI} _ % {QUERY_STRING}^(. * \ /) ([^ \/\ n] {0,255}) $ (밑줄은 물음표 대신 사용됩니다.) – MidnightMotion

답변

0

? %가 아닌 {QUERY_STRING} ($ _SERVER는 달리이 경우, 따라서 혼란 PHP에서 [ 'QUERY_STRING']), 추가 %가한다 RewriteCond에 {REQUEST_URI}는 문제 해결 : 확인

RewriteCond %{QUERY_STRING} "utm_campaign" 
RewriteCond %{REQUEST_URI}%_{QUERY_STRING} "utm_medium" 
RewriteCond %{QUERY_STRING} ^(.*\/)([^\/\n]{0,255})$ 
RewriteRule .* - [S=2] 

을하지 방법 대답이 주석에 있기 때문에이 솔루션에 대한 @Kamil Šrot 크레디트를 제공 하시겠습니까?

+0

uri와 query_string을 테스트하려면 THE_REQUEST를 사용할 수 있습니다. – Zeki

+0

THE_REQUEST에는 전체 요청 행이 들어 있습니다.이 경우 정규 표현식에 다른 문제가 발생합니다. 이 변수에 대해 알지 못했고 어쨌든 주석 달아 주셔서 감사합니다. – MidnightMotion

+1

THE_REQUEST를 사용하는 @Zeki은 마지막 옵션이며 절대적으로 필요하지 않은 경우에는 사용하지 않아야합니다. 이 변수는 정상화되기 전의 원시 요청을 포함하며 처리 및 처리와 관련하여 보안, 규칙의 복잡성 등 다른 문제를 직접 생성합니다. –

관련 문제