www가 아닌 웹 사이트를 www로 리디렉션하지 않는 웹 사이트가 있습니다.
내 Apache 구성은 다음과 같습니다.
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
내가 무엇을 놓치고 있습니까?
www가 아닌 웹 사이트를 www로 리디렉션하지 않는 웹 사이트가 있습니다.
내 Apache 구성은 다음과 같습니다.
RewriteEngine On
### re-direct to www
RewriteCond %{http_host} !^www.example.com [nc]
RewriteRule ^(.*)$ http://www.example.com/$1 [r=301,nc]
내가 무엇을 놓치고 있습니까?
답변:
다시 쓰기 엔진을 사용하면이 문제를 해결할 수 있습니다. 더 간단한 해결책은 다음과 같습니다.
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
# real server configuration
</VirtualHost>
그런 다음 실제 서버 구성 <VirtualHost>
을 ServerName www.example.com
위한 다른 섹션이 있습니다. 아파치 지시어를/
사용할 때 아파치는 자동으로 아무것도 보존 하지 않습니다.이 방법이 왜 작동하지 않는지에 대한 일반적인 오해입니다 (실제로 작동하는 경우).Redirect
www.example
하고 example
표시하면됩니다.
Redirect 301 / http://example2.com/extra/
경우 리디렉션 이 있지만 후행 슬래시가 누락 example.com/blah
됩니다 example2.com/extrablah
. 어떤 아이디어? (Apache 2.2.22)
http://example.com/subdir/?lold=13666
=> http://www.example.com/subdir/?lold=13666
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
example.com/subdi1/ws/*
www없이 통과 하자고 말 합니까?
s
세 번째 행에 http를 추가하십시오 .
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
www.
에 ServerAlias
?
웹 사이트 www
에서 제거하려면 파일 URL
에서이 코드를 사용 .htaccess
하십시오.
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ http://%1$1 [R=301,L]
www
웹 사이트 URL
에서이 코드를 사용 하려면.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^YourSite.com$
RewriteRule ^(.*)$ http://www.yourSite.com/$1 [R=301]
RewriteCond %{REQUEST_fileNAME} !-d
RewriteCond %{REQUEST_fileNAME} !-f
RewriteRule ^(([^/]+/)*[^./]+)$ /$1.html [R=301,L]
어디 YourSite.com
당신과 함께 교체해야합니다 URL
.
<VirtualHost *:80>
DocumentRoot "what/ever/root/to/source"
ServerName www.example.com
<Directory "what/ever/root/to/source">
Options FollowSymLinks MultiViews Includes ExecCGI
AllowOverride All
Order allow,deny
allow from all
<What Ever Rules You Need.>
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName example.com
ServerAlias *.example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
이것은 위의 코드에서 발생합니다. 첫 번째 가상 호스트 블록은 요청이 www.example.com인지 확인하고 해당 디렉토리에서 웹 사이트를 실행합니다.
실패하면 두 번째 가상 호스트 섹션으로 이동합니다. 여기서 www.example.com 이외의 것은 www.example.com으로 리디렉션됩니다.
여기 순서가 중요합니다. 두 번째 가상 호스트 지시문을 먼저 추가하면 리디렉션 루프가 발생합니다.
이 솔루션은 모든 요청을 도메인, www.yourdomain.com으로 리디렉션합니다.
건배!
이것은 몇 가지 개선 사항이있는 다른 많은 제안과 유사합니다.
%{REQUEST_URI}
규칙 의 영향을 무시합니다 .이전 RewriteRule
의 영향을받지 않는 경로 부분 %{REQUEST_URI}
은 다음 과 같습니다 .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ %{REQUEST_SCHEME}://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^!example.com$ [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [R=301,L]
이것은 HTTP_HOST
들어오는 URL ( example.com
) 의 도메인 이름 부분 만 포함 하는 변수로 시작합니다 . 도메인 이름에 a가없고 www.
도메인 이름과 정확하게 일치 한다고 가정하면 RewriteRule이 작동합니다. 패턴 ^(.*)$
은 REQUEST_URI
HTTP 요청 ( foo/blah/index.html
) 에서 요청 된 리소스 인의 모든 항목과 일치 합니다. 이를 역 참조에 저장 한 다음 새 도메인 이름으로 시작하는 URL을 다시 작성하는 데 사용됩니다 (www
.
[NC]
대 / 소문자를 구분하지 않는 패턴 일치를 [R=301]
나타내며 코드 301 (자원이 영구적으로 이동 됨)을 사용하여 외부 리디렉션을 표시하고 [L]
추가 재 작성을 모두 중지하고 즉시 리디렉션합니다.
비 www => www 및 반대 www => 비 www에 대한 리디렉션 코드 .htaccess 파일에 하드 코딩 도메인 및 체계가 없습니다. 따라서 원본 도메인과 http / https 버전이 유지됩니다.
비 WWW => WWW :
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ %{REQUEST_SCHEME}://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WWW => 비 WWW :
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [R=301,L]
참고 : % {REQUEST_SCHEME}을 사용할 수없는 Apache 2.2에서는 작동하지 않습니다. Apache 2.2와의 호환성을 위해 아래 코드를 사용하거나 % {REQUEST_SCHEME}를 고정 http / https로 바꾸십시오.
비 WWW => WWW :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ https://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
... 또는 더 짧은 버전 ...
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTPS}s ^on(s)|offs
RewriteRule ^ http%1://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
WWW => 비 WWW :
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L]
RewriteCond %{HTTPS} on
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [R=301,L]
... 최근 RewriteCond에서만 % N을 사용할 수 있으므로 더 짧은 버전을 사용할 수 없습니다 ...
나는 이것을 달렸다 ...
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www.*$ [NC]
RewriteRule ^/.+www\/(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
새 서버에서 25 개 이상의 도메인에 대해 범용이어야하므로이 지시문은 virtual.conf 파일의 <Directory> 태그에 있습니다. (dir은 모든 docroot의 부모입니다)
http://httpd.apache.org/docs/2.2/mod/mod_rewrite.html이 말한 내용에도 불구하고 전체 docroot가 패턴 일치를 통해 수행되었으므로 다시 쓰기 규칙에 대해 약간의 해킹을 수행해야했습니다 . 호스트와 포트 뒤에 만있는 것입니다.
Apache 2.4를 사용하는 경우, 다시 쓰기 아파치 모듈을 활성화 할 필요없이 다음과 같은 것을 사용할 수 있습니다.
# non-www to www
<If "%{HTTP_HOST} = 'domain.com'">
Redirect 301 "/" "http://www.domain.com/"
</If>
Apache 지시문 또는 .htaccess 파일에 다음 행을 추가 할 수 있습니다.
RewriteEngine on
RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
호스트를 수정하는 경우 아파치 변경 사항을 적용하는 것을 잊지 마십시오.
(기본 Drupal7 .htaccess를 기반으로하지만 대부분의 경우 작동해야 함)
<VirtualHost *:80>
ServerAlias example.com
RedirectMatch permanent ^/(.*) http://www.example.com/$1
</VirtualHost>
그러면 도메인 이름뿐만 아니라 내부 페이지도 리디렉션됩니다.
example.com/abcd.html ==> www.example.com/abcd.html
example.com/ab/cd.html?ef=gh ==> www.example.com/ab/cd.html?ef=gh
항상 사용하지 마십시오 Redirect permanent
(또는 향후 문제가 발생할 수있는 이유)
나중에 하위 도메인을 추가 할 가능성이있는 경우 사용하지 마십시오 redirect permanent
.
클라이언트가 등록되지 않은 하위 도메인을 사용한 경우 VirtualHost
나중에 등록 할 때도이 하위 도메인에 도달 할 수 없기 때문입니다.
redirect permanent
보낸다 HTTP 301 Moved Permanently
를 클라이언트 (브라우저) 많은 캐시가이 응답을 영원히 캐시합니다 (캐시가 수동으로 지워질 때까지). 따라서 해당 하위 도메인을 사용하면 서버를 다시 요청하지 않고도 항상 www. ***로 자동 리디렉션됩니다.
브라우저가 HTTP 301을 얼마나 오래 캐시합니까?를 참조하십시오 .
그래서 그냥 사용하십시오 Redirect
<VirtualHost *:80>
ServerName example.com
Redirect / http://www.example.com/
</VirtualHost>
방금 같은 문제가 있습니다. 그러나 이것으로 해결
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\.
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
이 규칙은 www가 아닌 www를 리디렉션합니다.
이 규칙은 www를 www가 아닌 www로 리디렉션하는 것입니다.
RewriteEngine On
RewriteCond %{HTTP_HOST} !^my-domain\.com$ [NC]
RewriteRule ^(.*)$ http://my-domain.com/$1 [R=301,L]
http://dense13.com/blog/2008/02/27/redirecting-non-www-to-www-with-htaccess/ 에서 참조하십시오
내가 사용하는 코드는 다음과 같습니다
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
-여러 도메인 이름을 호스팅하는 경우 (선택 사항)
모든 도메인 이름이 https를 사용하는 경우
-모든 도메인 이름이 www dot domainName을 사용하도록하려면
이것은 doble redirection을 피할 것이다 (http : // non www에서 http : // www로 https : // www로)
<VirtualHost *:80>
RewriteEngine On
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^(.*)$ https://www.%1$1 [R=301,L]
</VirtualHost>
과
<VirtualHost *:443>
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}$1 [R=301,L]
</VirtualHost>
리디렉션 코드 301을 가장 편리한 것으로 변경해야합니다.
s <VirtualHost *:80>
가 다른 두 블록 의 위의 솔루션을 사용하는 경우 ServerName
...
<VirtualHost *:80>
ServerName example.com
Redirect permanent / http://www.example.com/
</VirtualHost>
<VirtualHost *:80>
ServerName www.example.com
</VirtualHost>
... 다음 설정해야합니다 NameVirtualHost On
뿐만 아니라 .
이 작업을 수행하지 않으면 Apache는 다른 ServerName
s를 사용 하여 블록을 구별 할 수 없으므로 다음 오류 메시지가 표시됩니다.
[warn] _default_ VirtualHost overlap on port 80, the first has precedence
... 리다이렉션이 발생하지 않거나 어떤 블록을 먼저 넣느냐에 따라 무한 리다이렉션 루프가 있습니다.
WP Multisite에서 비슷한 작업을 수행했는데 리디렉션 규칙은 일반적이어야합니다 (네트워크에 추가 할 특정 도메인에 대해). 먼저 도메인 (파킹 된 도메인)에 와일드 카드를 추가하여 해결했습니다. 를 참고하십시오. .com 후
CNAME * domain.com.
그런 다음 멀티 사이트 루트의 .htaccess 파일에 다음 줄을 추가했습니다. 모든 사이트에서 작동한다고 생각합니다.
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
잘하면 이것이 도움이 될 것입니다.
추신. www가 아닌 www를 www로 리디렉션하려면 마지막 줄을
RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
여러 가상 호스트를 사용할 때 ServerAlias를 사용하는 것이 더 쉽고 유용하다는 것을 알았습니다.
<VirtualHost x.x.x.x:80>
ServerName www.example.com
ServerAlias example.com
....
</VirtualHost>
이것은 https vhosts 와도 작동합니다.
.htaccess
: 기반 솔루션 나는 직경의 질문에 제기 된 답변 제안 stackoverflow.com/a/5262044/367456