2011-03-02 4 views
1

내가 www.example.com에 example.com에 액세스하는 사용자를 리디렉션 내 httpd.ini 파일에 다음 줄을 사용하고 있습니다 : 내가 좋아하는 것 ISAPI 다시 쓰기를 사용하여 쿼리 문자열을 리디렉션하는 방법?

RewriteCond Host: (?:www\.)?example.com 
RewriteRule (.*) http\://www.example.com [RP,L] 

는 쿼리 문자열을 리디렉션하는 방법을 알고에 대한 사용자 액세스 여부 예를 들어, www가없이 내 사이트 :

내 사용자 액세스 :

example.com?a=1&b=2 
example.com/a/b 
내가로 리디렉션하고 싶습니다

:

www.example.com?a=1&b=2 
www.example.com/a/b 

누군가 나를 도울 수 있습니까?

고마워요.

답변

4

isapi_rewrite v2를 사용하고있는 것처럼 보입니다. 따라서 해당 버전에 대한 답변을 드리겠습니다. v3 구문은 약간 다릅니다.

첫 번째 줄에는 www에 대한 부정적 예측을 위해 !이 필요하다고 생각합니다. 표시된 것처럼 www가 아닌 ​​www가 일치합니다.

대답은 등, 다음, URL의 조각을 캡처 submatch $ 1, $ 2 재 작성에서 그들을 사용하는 것

RewriteCond Host: (?!www\.)example.com 
RewriteRule (.*) http\://www.example.com$1 [I,RP] 

당신은에, 어떤 도메인에 대한 더 일반적인 만들 수
example.com 대신 캡처하여 다른 웹 사이트로 쉽게 복사하십시오. URL의 나머지 부분은 이제 $ 2이지만 첫 번째 캡처 $ 1이됩니다.

RewriteCond Host: (?!www\.)(.*) 
RewriteRule (.*) http\://www.$1$2 [I,RP] 


규칙은 위 항상 페이지가 HTTPS를 경우에도, HTTP로 리디렉션됩니다. http 또는 https를 그대로 유지하려는 경우 (예 : https://example.com/a?b=1 ~ https://www.example.com/a?b=1) https 플래그를 찾아 's'로 대체하십시오. 이것은 말로 표현하기가 까다 롭습니다. HTTPS 서버 변수 값을 'on'으로 찾고, 'on'이면이 값을 유지합니다 (이제 두 번째 캡처입니다). 다른 것이 있으면 유지하지 않습니다. 그런 다음 규칙에서 두 번째 캡처가 있으면? 2가 테스트됩니다. 그럴 경우 's'를 추가하고, 그렇지 않으면 (콜론), 아무 것도 추가하지 않습니다 (콜론 뒤에 아무 것도 입력하지 않음). 이 세트에서 나머지 URL은 이제 세 번째 하위 문자열입니다.

RewriteCond Host: (?!www\.)(.*) 
RewriteCond %HTTPS (on)|.* 
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP] 


마지막으로 (거의 다!)이 혼자 하위 도메인을 두지 않습니다. 'example.com'대신 (. *)로 인해 abc.example.com/whatever...www.abc.example.com/whatever...으로 바꿉니다. 따라서 개발자를위한 스테이징 또는 로컬 호스트와 같이 혼자 남겨 둘 하위 도메인이 있거나 호스팅 된 쇼핑 도메인의 '상점'이라고 말하면 'www'를 사용하여 '또는'할 수 있습니다 (localhost에는 마침표가 없으며, // localhost를 처리하기 위해).

RewriteCond Host: (?!www\.|staging\.|shop\.|localhost)(.*) 
RewriteCond %HTTPS (on)|.* 
RewriteRule (.*) http(?2s:)\://www.$1$3 [I,RP]