.htaccess에서 www가 아닌 ​​www를 www로 리디렉션


189

내 .htaccess 파일에 있습니다.

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

그러나 루트에서 파일에 액세스 할 때마다로 http://example.com/robots.txt리디렉션됩니다 http://www.example.comrobots.txt/.

올바르게 리디렉션되도록 수정하려면 http://www.example.com/robots.txt어떻게 해야 합니까?

답변:


391

구성을 다음과 같이 변경하십시오 (슬래시 추가).

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

또는 @absiddiqueLive가 제안한 아래에 설명 된 솔루션 은 모든 도메인에서 작동합니다.

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

http 및 https를 지원하고 프로토콜 선택을 유지해야하는 경우 다음을 시도하십시오.

RewriteRule ^login\$ https://www.%{HTTP_HOST}/login [R=301,L]

어디 대신 logincheckout.php당신은에 HTTPS를 지원하기 위해 필요하거나 어떤 URL.

나는 이것이 나쁜 생각이라고 주장한다. 추론을 위해이 답변을 읽으십시오 .


이 솔루션은 로그인 또는 가입과 같은 일부 페이지에서 https 프로토콜을 사용하는 경우 작동하지 않습니다.
Alexey Kosov

일부 정보를 포함하도록 게시물을 약간 업데이트했습니다. 사용할 프로토콜을 일반적으로 올바르게 선택하기는 어렵습니다.
랜달 헌트

3
첫 번째 솔루션은 충분히 리디렉션되지 않고 두 번째 솔루션은 너무 많이 리디렉션되는 것 같습니다. 예를 들어 blog.example.com이된다www.blog.example.com
G 맨에게

localhost에서 개발하는 동안 리디렉션을 피하는 방법을 추가 할 수 있습니까?
버그 토끼

여기에있는 모든 것을 따르고 있지만 아무것도 작동하지 않습니다. 라 라벨 설정을 사용하고 있습니다. 아무도 왜 이것이 나를 위해 작동하지 않는지 알고 있습니까? www.domain.com과 domain.com은 모두 올바르게로드되지만 domain.com은 www.domain.com으로 리디렉션되지 않습니다. 이것이 내 DNS에 문제가 될 수 있습니까?
안녕하세요 세계

93

https 및 http를 지원하는 올바른 솔루션은 다음과 같습니다.

# Redirect to www
RewriteCond %{HTTP_HOST} ^[^.]+\.[^.]+$
RewriteCond %{HTTPS}s ^on(s)|
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

7
이것은 완벽합니다. 또한 www다른 일반적인 솔루션처럼 하위 도메인을 리디렉션하지 않습니다 .
Fabian Schmengler

4
이것은 최상의 솔루션이며, 허용 된 답변보다 훨씬 잘 작동하며, HTTPS를 올바르게 관리합니다.
Tamik Soziev

3
완벽하게 작동합니다! 그리고 그런 몇 줄에!
zeckdude

8
이것은 최고의 답변입니다
Andrew

8
내가 실수하지 않으면 둘 이상의 점에서 작동하지 않습니다. 예 :yoursite.co.uk
TrashyMcTrash

82
RewriteEngine On

RewriteCond %{HTTP_HOST} !^www\.

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

Https

RewriteCond %{HTTPS}s ^on(s)|

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

7
이 솔루션은 모든 도메인에서 작동하므로 새 프로젝트의 코드를 구현하거나 기존 프로젝트에 추가 도메인을 구현할 때 인적 오류를 최소화하므로 @ranman보다 선호됩니다.
Frankie

나는이 솔루션을 선호하지만 왜 ^(.*)$대신에 (.*)?
Popnoodles

이 솔루션이 더 좋지만 당신도 포함하도록 편집했습니다.
랜달 헌트

1
이것은 모든 영역에서 간단하고 효과적입니다! 감사합니다
eirenaios

RewriteCond % {HTTPS} s ^ on (s) |를 따를 수 있습니다. RewriteRule ^ http % 1 : //www.% {HTTP_HOST} / $ 1 [R = 301, L]
absiddiqueLive

24

다음 예제는 sslnon-ssl 모두에서 작동하며 하나의 규칙 만 사용하여 http 및 https를 관리 할 때 훨씬 빠릅니다.

RewriteEngine on


RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTPS}s on(s)|offs()
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [NE,L,R]

[테스트]

리디렉션됩니다

http

https


1
내가 생각해 낸 것에 매우 가깝습니다. HTTP 호스트에서 둘 이상의 점을 지원합니다 (예 : "mysite.co.uk").
Adambean

2
호기심 때문에 R = 301을 사용하지 않는 이유는 무엇입니까? 코드를 지정하지 않으면 기본적으로 302 (이동 된 온도)가 사용됩니다.
Marc

1
완벽하게 작동합니다. 이것이 정답입니다.
James Nisbet

8

이것을 시도하십시오, 나는 많은 웹 사이트에서 그것을 사용했습니다, 그것은 완벽하게 작동합니다

Options +FollowSymLinks
RewriteEngine On
RewriteCond %{HTTP_HOST} ^bewebdeveloper.com$
RewriteRule ^(.*) http://www.bewebdeveloper.com/$1  [QSA,L,R=301]

4

위의 모든 솔루션을 테스트했지만 나를 위해 작동하지 않습니다 .http : //를 제거하려고 시도했지만 리디렉션하지도 www가 제대로 리디렉션되지 않으므로 혼란 스럽습니다. 특히 https로 모든 사이트를 실행하고 있습니다. : //

그래서 몇 가지 코드를 결합하여 http : // 및 https : //와 www 및 non-www 모두에 대한 완벽한 솔루션을 고안했습니다.

# HTTPS forced
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Redirect to www
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

이것이 누군가를 도울 수 있기를 바랍니다 :)



3

이 구성은 SSL이 구성된 bitnami 워드 프레스에서 나에게 효과적이었습니다.

/opt/bitnami/apps/wordpress/conf/httpd-app.conf 파일의 "RewriteEngine On"아래에 아래 내용을 추가했습니다.

RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteBase /
RewriteCond %{HTTPS} !on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

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

WWW로 시작되지 않은 도메인을 리디렉션합니다. 모든 하위 도메인을 리디렉션하지는 않습니다.

쓸모있다.


2

최상위 답변은 www가 아닌 ​​www를 www (예 : mysite.com-> www.mysite.com )로 리디렉션 하지만 와일드 카드 하위 도메인은 고려하지 않습니다.

random.mysite.com -> www.random.mysite.com

HTTPS를 사용하거나 사용하지 않는 솔루션은 다음과 같습니다.

HTTP

RewriteEngine On

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

HTTP / HTTPS

RewriteEngine On

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ - [env=protocol:https]

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ - [env=protocol:http]

RewriteCond %{HTTP_HOST} !www.mysite.com$ [NC]
RewriteRule ^(.*)$ %{ENV:protocol}://www.mysite.com/$1 [L,R=301]

* 참고 : 현재 테스트 할 인증서가 없기 때문에 https를 테스트하지 않았지만 누군가 내가 가지고있는 것을 확인하거나 최적화 할 수 있다면 멋질 것입니다.


첫 번째 $는 여기서 무엇을합니까 : '^ (. *) $'
Vaishal Patel

0

가능하면 이것을 기본 Apache 구성 파일에 추가하십시오. 더 가벼운 무게의 솔루션으로 처리가 덜 필요합니다.

<VirtualHost 64.65.66.67>
        ServerName example.com
        Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost 64.65.66.67>
   ServerAdmin me@example.com
   ServerName www.example.com
   DocumentRoot /var/www/example
   .
   .
   . etc

따라서 VirtualHost"example.com"에 대한 별도의 요청은 해당 요청을 캡처 한 후 영구적으로 main으로 리디렉션합니다 VirtualHost. 따라서 모든 요청에 ​​대한 REGEX 구문 분석이 없으며 클라이언트 브라우저는 리디렉션을 캐시하므로 "잘못된"URL을 다시 요청하지 않으므로 서버로드를 절약 할 수 있습니다.

끝에 슬래시가 Redirect permanent / http://www.example.com/있습니다. 그렇지 않으면에서 example.com/asdf리디렉션이 http://www.example.comasdf대신로 리디렉션됩니다 http://www.example.com/asdf.


0

두 가지 경고

301을 피하고 최신 303 또는 307 응답 상태 코드를 선호하십시오.

301 피하기

다음으로 표시된 영구 리디렉션이 정말로 필요한 경우 신중하게 생각하십시오. [R=301]나중에 변경하기로 결정한 경우 페이지의 이전 방문자가 원래 리디렉션의 페이지를 계속 볼 수 있기 때문에 하십시오.

영구 리디렉션 정보는 브라우저의 캐시에 자주 저장되며 일반적으로 제거하기가 어렵습니다 (페이지를 다시로드해도 문제가 해결되지 않음). 귀하의 웹 사이트 방문자는 이전 경로 재 지정이 "영원히"중단 될 것입니다.

302도 피하십시오

새로운 버전의 HTTP 프로토콜 (v1.1)에는 302 대신 사용할 수있는 두 개의 새로운 응답 상태 코드가 추가되었습니다.

  • 303 URL 리디렉션이지만 요청 유형을 GET으로 변경해야합니다.
  • 307 URL 리디렉션이지만 처음 전송 된 요청 유형을 유지해야합니다.

코드 302가 모호한 것으로 간주되지만 코드 (비 영구적 리디렉션)를 계속 사용할 수 있습니다 . 어쨌든 대부분의 브라우저 302는 새 303코드가 지시 하는 것과 같은 방식으로 구현 합니다.


301에 대한 귀하의 경고와 관련하여 동일한 도메인 이름에 대해 이야기하는 경우에도 적용됩니까? 이 경우 어떻게 적용되는지 잘 모르겠습니다 ...에서 모든 URL을에서 (으) http://example.com/testing로 리디렉션하십시오 http://www.example.com/testing. 장기적으로 나쁜 접근 방식이 될 수 있습니까? 감사합니다,
Sara_

-1

.htaccess로 작성 :)

## Redirect from non-www to www (remove the two lines below to enable)
    RewriteCond %{HTTP_HOST} !^www\. [NC]
    RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

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