2012-11-28 2 views
0

내 정규식 코드는 myvar= 이후의 ([^ &] +) (&. *)의 두 번째 변수와 잘 작동하지만 세 번째는 얻을 수 없습니다. foo= (두 번째와 동일). 다음과 같은 URL을 출력 Regex에서 세 번째 변수를 가져올 수 없습니다.

RewriteCond %{ENV:REDIRECT_STATUS} ^$ 

RewriteCond %{QUERY_STRING} ^(.*&)?myvar=([^&]+)(&.*)?&foo=([^&]+)(&.*) [NC] 

RewriteRule ^(index\.php)?$ /site/myvar/%2/%3/? [R=301,L] 

:
http://localhost/site/myvar/15// 

그렇다면 마지막 2 슬래시와 출력 변수로 3?

+1

이것은 PHP와 어떤 관련이 있습니까? 오히려 .htaccess 문제가 아닌가요? –

+0

캡처가 'Cond'에서 'Rule'까지 이동한다는 것을 알지 못했습니다. 이것은 분명히 사실입니까? –

+0

@LightnessRacesinOrbit : Cond의 그룹 앞에 퍼센트 (% N, N은 그룹 번호)가옵니다. 이것은 그룹을 가진 마지막 Cond에만 적용됩니다. 규칙의 그룹 앞에는 달러 ($ N, N은 그룹 번호)가옵니다. http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html#rewritecond –

답변

2

원하는 것은 네 번째 캡쳐가 아니라 세 번째 캡쳐입니다. 세 번째는 비어 있더라도 (&.*)입니다. 숫자를 결정하려면 여는 괄호를 왼쪽에서 오른쪽으로 계산하면됩니다.

+0

글쎄, 네 말이 맞아. 감사. – Adige72

관련 문제