문제

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]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top