.htaccess- "www"를 강제하는 방법 일반적인 방식으로?


102

다음으로 변경 domain.com됩니다 www.domain.com.

# Force the "www."
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L]

모든 도메인에서 작동하도록 "도메인"부분을 어떻게 바꾸 나요?

답변:


249

이 규칙을 사용합니다.

RewriteEngine On
RewriteCond %{HTTP_HOST} !=""
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

첫 번째 조건은 Host 값이 비어 있지 않은지 확인합니다 (HTTP / 1.0의 경우). 두 번째는 Host 값이로 시작하지 않는지 확인합니다 www.. HTTPS위한 제 수표 ( %{HTTPS}하나 인 on또는 off그래서 %{HTTPS}s하나이고 ons또는 offs와 경우 일치). 그런 다음 의 대체 부분은 정보 부분을 전체 URL로 병합합니다.onssRewriteRule


31
이 솔루션은 모든 하위 도메인을 www.yourdomain.com으로 전달하려는 경우에만 작동합니다. www 만 강제하려면 두 번째 줄을 다음과 같이 업데이트해야합니다.RewriteCond %{HTTP_HOST} ^yourdomain.com [NC]
Jared Pomranky

2
나는하지 않는 모든 내 하위 도메인의 질문에 게시 규칙 ... 사용하여 www.mydomain.com에 전달

3
매우 영리한! 다음 줄에서 사용한 캡처 그룹에서 HTTPS 검사를 강제로 "S"를 반환하는 것이 좋습니다. 매우 우아한
code_monk 2014-02-22

보편적 인 대답처럼 보이며 HTTP 및 일반 프로토콜을 다루며 매력처럼 작동합니다.
Clain Dsilva

1
감사! RewriteEngine On그대로 복사하여 붙여 넣으면 500 서버 오류가 발생할 수 있으므로이를 완료하기위한 첫 번째 줄로 추가 합니다.
Ryan Casas 2015 년

44

이렇게하면됩니다.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

5

www가 아닌 ​​모든 요청을 www 버전으로 리디렉션하려면 .htaccess 파일에 다음 코드를 추가하기 만하면됩니다.

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

3

하위 도메인에서는 작동하지 않습니다.

domain.com이 www.domain.com으로 올바르게 리디렉션됩니다.

그러나

images.domain.com은 www.images.domain.com으로 리디렉션됩니다.

하위 도메인이 "www가 아님"인지 확인하는 대신 두 개의 점이 있는지 확인합니다.

RewriteCond %{HTTP_HOST} ^(.*)$ [NC]
RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\. [NC]
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ HTTP%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

이 솔루션이 마음에 듭니다. 어쨌든 .co.uk와 같은 TLD로 동일한 작업을 수행하려면?
TylersSN

1
@iUseMagentoNow 단지 예를 들어, 점 증가 : RewriteCond %{HTTP_HOST} !^(.*)\.(.*)\.(.*)\. [NC](엄밀히 말하면, 당신의 TLD는 여전히 .uk및 도메인입니다 something.co.)
mirabilos

이 경우 .co는 두 번째 수준의 도메인이며 .uk가 국가 코드 TLD 인 도메인의 일부가 아닙니다. 솔직히 말해서, 호스팅 업계에서 일하고 도메인 이름에 대한 새로운 형식을 보았을 때 공식적인 용도 이외의 다른 용도로 지속되는 현재 TLD 형식을 볼 수 없습니다. 정부, 조직 등. 가까운 장래에 fred.bloggs와 같은 fqdn을 현재 표준과 비슷한 가격으로 등록 할 수있게되면 개인 웹은 DNS 관점에서 매우 다르게 보일 것입니다.
Chris

1

다음은 'www'가없는 모든 요청에 ​​접두사를 붙이고 편집 된 요청을 새 URI로 리디렉션해야합니다.

RewriteCond "%{HTTP_HOST}" "!^www\."         [NC]
RewriteCond "%{HTTP_HOST}" "(.*)"
RewriteRule "(.*)"         "http://www.%1$1" [R=301,L]

1
RewriteEngine On

RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R=301]

하위 도메인 제외로 리디렉션 example.com됩니다 www.example.com.


나를 위해이 www.www.example.com 하하에 www.example.com을 보내는 것 같다
알버트 렌쇼

@Albert 아마도 이것은 브라우저 캐시 때문일 것입니다. 캐시를 지우고 다시 시도하십시오.
Amit Verma

당신이 올바른지! 방금 시크릿 (크롬)에서 실행했는데 제대로 작동했습니다. 감사합니다!
알버트 렌쇼

1
나는이 일반적인 규칙을 매우 좋아합니다. 그러나 이미 두 개의 점이 있기 때문에 domain.co.uk 에서는 작동 하지 않습니다. .co.uk에서도 작동하도록이 규칙을 어떻게 변경할 수 있습니까?
Sacha Vorbeck

1
.co.uk 및 기타 하위 cctld의 경우 다음과 같이 작동합니다. ^ ([^.] + \. [^.] +) (\. (uk | ar | cy | ar | tr))? $하지만 불행히도 일부 혼합 domain.es 및 domain.com.es를 허용하는 es와 같은 유형의 tld ( wiki.mozilla.org/TLD_List ). 정규식에 | es를 추가하면 여기에서 원하지 않는 www.domain.es뿐만 아니라 domain.es 와도 일치합니다. 이 혼합 된 입력 하위 ccTLD를 처리 할 수있는 방법을 찾아야
사샤 Vorbeck


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.