isapi rewrite- rewriterule에서 액세스 쿼리 문자열 패턴 일치
-
11-09-2019 - |
문제
ISAPI Rewrite 3 (IIS 용 Mod Rewrite Clone)을 사용하고 쿼리 문자열을 기반으로 URL을 다시 작성한 다음 다시 작성에서 해당 쿼리 문자열의 일부를 전달하려고합니다.
따라서 다음과 같은 URL을 입력하면 다음과 같습니다. /test/home.cfm?page=default&arbitraryextraarg=123
나는 그것을 다시 작성하기를 원합니다 : /test/index.cfm?page=home& arbitraryextraarg=123
다음 조건/규칙이 있습니다.
RewriteCond %{QUERY_STRING} ^page=default(.*)$ [I]
RewriteRule ^/test/home.cfm$ /test/index.cfm?page=home%1 [I,R=301]
그러나 추가 쿼리 문자열 변수는 결코 전달되지 않습니다. %1은 비어있는 것 같습니다.
이것은 재 작성식에서 패턴 일치를 참조하는 방법입니다.
내가 여기서 무엇을 놓치고 있습니까?
감사!
편집 : 다시 쓰기가 완전히 무시되는 것처럼 보입니다. 내 로그 파일의 모습은 다음과 같습니다.
[snip] (2) init rewrite engine with requested uri /test/home.cfm?page=default
[snip] (1) Htaccess process request C:\Inetpub\wwwroot\dev\IsapiRewrite\httpd.conf
[snip] (3) applying pattern '^/test/home\.cfm$' to uri '/test/home.cfm'
[snip] (1) escaping /test/index.cfm?page=home
[snip] (2) explicitly forcing redirect with http://www.devsite.com/test/index.cfm?page=home
[snip] (2) internal redirect with /test/home.cfm?page=default [INTERNAL REDIRECT]
[snip] (2) init rewrite engine with requested uri /test/index.cfm?page=home
[snip] (1) Htaccess process request C:\Inetpub\wwwroot\dev\IsapiRewrite\httpd.conf
[snip] (3) applying pattern '^/test/home\.cfm$' to uri '/test/index.cfm'
다시 작성된 패턴 체크인에 대한 언급이 있어야합니까?
해결책
그러나 추가 쿼리 문자열 변수는 결코 전달되지 않습니다. %1은 비어있는 것 같습니다.
%1은 로그에 따라 두 번째 매개 변수가없는 /test/home.cfm?page=default입니다.
로그에서 재 작성제 처리가 없으면 rewriteloglevel이 낮기 때문일 수 있습니다.
구성은 다음과 같습니다.
rewritecond %{query_string} ^page = default (.+) $ [nc
rewriterule ^/test/home.cfm $ /test/index.cfm?page=home%1 [nc, r = 301, l
다른 팁
Isapi Rewrite는 mod_rewrite와 조금 다르다고 생각합니다.
복잡한 규칙 (조건이있는 규칙)에 존재하는 정규 표현식에 괄호를 넣을 때마다 형식 문자열 (사용
$N
구문) 또는 역 참조 (사용\N
구문) 후속 조건에서. 이 잠수함은 전체 복잡한 규칙을 위해 전 세계적입니다 (재 작성 지침 및 해당 재 작성 지침). 잠수함은 첫 번째부터 시작하여 왼쪽에서 왼쪽에서 오른쪽으로 번호가 매겨집니다. 재 작성 지침 (그러한 지침이 존재하는 경우) 재 작성.
그래서 시도하십시오 $1
어디에서 나타나든 첫 번째 그룹의 경기를 얻으려면 :
RewriteCond %{QUERY_STRING} ^page=default(.*)$ [I]
RewriteRule ^/test/home\.cfm$ /test/index.cfm?page=home$1 [I,R=301]
Isapi는 다시 작성합니다 Apache의 mod_rewrite와 더 호환되는 것 같습니다.
나는 이것이 또한 효과가 있다고 생각한다 :
RewriteRule ^/test/home.cfm\?page=default(.*)$ /test/index.cfm?page=home%1 [I,R=301]