같은 것 this?
그리고 추가 정보는 this을 참조하십시오.
기본 정보는
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^(.*/)([^/]+)/([^/]+) $1?$2=$3&%1 [L]
RewriteCond %{QUERY_STRING} ^(.*)$
RewriteRule ^([^/]+)/ $1?%1 [L]
그것은 첫 번째 매개 변수를 받아 해당 페이지를 호출하는 다음
/mypage/param1/val1/param2/val2/param3/val3/... --->
/mypage?param1=val1¶m2=val2¶m3=val3&...
다시 작성됩니다 이러한 규칙입니다. 나머지 매개 변수는 쿼리 문자열로 바뀝니다.
코드 편집 방법에 대해 자세히 알아보십시오.
첫 번째 줄 (및 세 번째 줄)은 "?" 재 작성된 URL의 끝에 다시 추가 할 수 있습니다. 과 같은 것은 [QSA] 플래그로 수행 할 수 있지만 표시하려면 을 명시 적으로 사용하는 것이 좋습니다.
문자열이 % 1 변수에 저장됩니다.
두 번째 줄에는 일반 표현식을 사용하여 URL을 세 부분으로 나눕니다.
$ 2와 $ 3은 경로의 마지막 두 부분입니다. $ 1 전의 모든 것입니다.
그래서이 :
/mypage/param1/val1/param2/val2/param3/val3/param4/val4/param5/val5/
이되다 :
$1 $2 $3
/mypage/param1/val1/param2/val2/param3/val3/param4/val4/ param5 val5
및 (가독성을 위해 추가 공간)이 같이 다시한다 :
/mypage/param1/val1/param2/val2/param3/val3/param4/val4/ ? param5 = val5
귀하의 URL이 아닌 다른 구분을 사용하는 경우 슬래시를 사용하면 일반 표현을 수정할 수 있습니다.
[L] ("last") 플래그는 나머지 규칙이 실행되지 않도록합니다. 그러나 이것이 핵심입니다 - mod_rewrite가 새로운 URL로 웹 서버를 호출하고 새로운 URL이 mod_rewrite를 통해 다시 전송됩니다! 이것은 종종 mod_rewrite 재귀라고 불리는데, 이것이 정확하게 작동하기를 원하는 것입니다.
다음 번에 다음 두 부분이 끝에서 제거되고 이 쿼리 문자열에 추가됩니다.
이 :
$1 $2 $3 %1
/mypage/param1/val1/param2/val2/param3/val3 param4 val4 ? param5=val5
이되다 :
이것은 URL의 모든 부분이 쿼리 문자열의 부분으로 변환 될 때까지 일어나고 계속해서
/mypage/param1/val1/param2/val2/param3/val3 ? param4 = val4 & param5=val5
.이 경우 두 번째 줄은 과 일치하지 않지만 네 번째 줄은 일치합니다. 그것이 바로 프로그램에 전화 할 수있는 최종 도착 URL입니다. 위 링크는 다른 규칙을 허용하는 약간 다른 변형 인 에 대한 답변을 보여줍니다.
mod_rewrite 에 재귀가 발생할 수있는 횟수에는 제한이 있습니다. .htaccess의 MaxRedirects
및 apache conf 파일의 LimitInternalRecursion
의 설정을 참조하십시오.
죄송하지만 이해가 안됩니다! 전체 코드는 필요 없지만 코드는 어떻게 이해해야합니다. 페이지는 항상 포럼이며 값은 슬래시로 구분되지 않고 "_"또는 ":"로 구분됩니다. 이 코드를 사용하면 :
첫 번째 매개 변수 만 사용하여 반으로 작동합니다. 감사합니다. –FedericoBiccheddu, 나는 더 많은 설명을 덧붙였다. 이게 도움이 되길 바란다. 나는 당신의 URL이'/'이 아닌'_'을 사용한다는 것을 안다. 그러나 약간 다른 정규 표현식을 사용한다면 개념은 잘 작동 할 것이다. – bmb