.htaccess 하위 도메인을 디렉토리에 다시 작성


답변:


107

.htaccess 파일에 넣으십시오.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^sub.domain.com
RewriteRule ^(.*)$ /subdomains/sub/$1 [L,NC,QSA]

보다 일반적인 규칙 (뿐만 아니라 모든 하위 도메인에서 작동 함 sub)의 경우 마지막 두 줄을 다음으로 바꿉니다.

RewriteEngine on
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com
RewriteRule ^(.*)$ subdomains/%1/$1 [L,NC,QSA]

3
Ansari의 솔루션은 작동하지만로 이동 http://test.domain.com하면 URL 이로 리디렉션됩니다 http://test.domain.com/subdomains/test/. /subdomains/test/끝에 표시하지 않고 가능 합니까?
Erik Djupvik

2
이 경우, 당신이 사용에보고해야합니다 생각 mod_proxy를을 하고 지정 P받는 사람뿐만 아니라 플래그 L.
Ansari

1
아니,에 리디렉션 http://test.domain.com/subdomains/test/난 단지 그것을 표시 할 때,http://test.domain.com/
에릭 듀프 비크

1
나는 그것이 어떻게 리디렉션되는지 볼 수 없습니다 test.domain.com/subdomains/test-아마도 여기에 다른 일이있을 수 있습니다. RewriteBase /바로 추가 할 수 있습니까 RewriteEngine on? 또한 계속 표시 test.domain.com하려면 mod_proxy와 [P]플래그 를 사용해야합니다 .
Ansari

1
@anubhava의 답변을 사용하여 작동하도록 만들 수있었습니다. stackoverflow.com/a/22395008/128984
Micah

50

나는 mod_rewrite 전문가가 아니며 종종 어려움을 겪지 만 내 사이트 중 하나에서 이것을 수행했으며 상황에 따라 다른 플래그 등이 필요할 수 있습니다. 나는 이것을 사용하고있다 :

RewriteEngine on

RewriteCond %{HTTP_HOST} ^subdomain\.example\.com$
RewriteCond %{REQUEST_URI} !^/subdomains/subdomain
RewriteRule ^(.*)$ /subdomains/subdomain/$1 [L] 

나머지 사이트에 대한 다른 재 작성 규칙은 나중에 적용하여 하위 도메인 재 작성을 방해하지 않도록해야합니다.


그렇게 말할 것입니다. 이 설정이 여기 내 대답과 동일한 설정이라는 것을 알았 습니다 .
Chetabahana 2015 년

5
참고로 누군가 .htaccess가이 페이지를 방문하는 경우 (예 : 내가 한 것처럼) 실제 .htaccess파일을 만드는 것 외에 효과를 얻으려면 설정 AllowOverride에서 VirtualHost설정 해야합니다 ( stackoverflow.com/a/22819550/1657502 ). 아파치의 수 rewrite모듈을 다음 아파치 (다시 시작 stackoverflow.com/a/5758551/1657502 )
안토니오 비니 메네 제스 Medei

www를 사용하여 하위 도메인을 방문하면 작동하지 않습니다. @Minh 솔루션은 모든 경우에 작동합니다.
Rohan Khude

@RohanKhude, www.example.com과 example.com이 서로 다른 콘텐츠를 제공하기를 원하십니까? 일반적으로 SEO의 경우 www.example.com에서 example.com으로 영구 리디렉션을 발행하거나 그 반대의 경우도 마찬가지입니다.
Lee Kowalkowski

1
@RohanKhude www를 하위 도메인의 하위 도메인으로 사용하는 것도 DNS 수준에서 작업해야하는 것입니다. 임의의 하위 도메인에서 작동해야한다는 귀하의 기대가 잘못되었다고 생각합니다. Minh의 대답 ( stackoverflow.com/a/41389905/30945 )은 .htaccess 구성이 1 개의 하위 도메인 만 지원한다고 가정하므로 해당 측면에서 덜 견고합니다. 내 솔루션은 필요한만큼의 하위 도메인을 지원하지만 지원되는 모든 하위 도메인을 명시 적으로 정의해야하지만 선택적 www.접두사는 재 작성보다 리디렉션을 통해 가장 잘 지원됩니다.
Lee Kowalkowski

16

.htaccess 에서 다음 규칙을 사용하여 하위 도메인을 하위 폴더에 다시 쓸 수 있습니다 .

RewriteEngine On

 # If the host is "sub.domain.com"
 RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]
 # Then rewrite any request to /folder
 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

줄 단위 설명 :

  RewriteEngine on

위의 줄은 서버가 URL을 다시 쓰기 위해 엔진을 켜도록 지시합니다.

  RewriteCond %{HTTP_HOST} ^sub.domain.com$ [NC]

이 줄은 정규식 패턴을 사용하여 HTTP 호스트와 일치하는 RewriteRule의 조건입니다. 조건은 호스트가 sub.domain.com 이면 규칙을 실행하는 것입니다.

 RewriteRule ^((?!folder).*)$ /folder/$1 [NC,L]

이 규칙은 http://sub.domain.com/foo 와 일치 하며 내부적으로 http://sub.domain.com/folder/foo로 리디렉션합니다 .

sub.domain.com 을 하위 도메인으로 바꾸고 폴더를 하위 도메인을 가리 키려는 폴더의 이름으로 바꿉니다 .


1
이것은 나에게 정답입니다-내가 여기에 어떻게 왔는지에 대한 설명은 다음과 같습니다. 메인 사이트 TLD에 SSL을 설치했을 때 분명히 깨지는 하위 도메인 리디렉션과 관련된 오래된 문제를 찾고 여기에 도착했습니다. 리디렉션은 처음에 여전히 기본 사이트 TLD를 사용하려고 시도하고 보안 규칙을 위반했습니다. 내가 필요한 것은 동일한 호스트에 있지만 기본 사이트에서 멀리 떨어진 하위 도메인 (완전히 다른 TLD에있는)을 유지하는 것입니다. 위와 같이 다시 쓰기 규칙을 추가하면 전체 하위 도메인을 기본 TLD 사이트에서 호스팅되는 폴더로 전달할 수있었습니다.
Richard Bown

8

나는 같은 문제가 있었고 http://www.webmasterworld.com/apache/3163397.htm 에서 자세한 설명을 찾았습니다 .

내 솔루션 (하위 도메인 내용은 다음 폴더에 있어야합니다 sd_subdomain.

Options +FollowSymLinks -MultiViews

RewriteEngine On
RewriteBase /

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} subdomain\.domain\.com
RewriteCond $1 !^sd_
RewriteRule (.*) /sd_subdomain/$1 [L]

1
나를 위해 작동하지 않습니다. 도메인의 DNS 영역에서 무언가를 구성해야합니까?
totoaussi

1
@totoaussi 동일한 서버를 가리키는 하위 도메인 당 * A 레코드 또는 A 레코드를 만들어야합니다.
Pablo Torrecilla 2015 년

4

이렇게하면 동일한 폴더로 하위 도메인으로 리디렉션됩니다.

.httaccess

RewriteCond %{HTTP_HOST} !^www\.
RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain\.com/subdomains/%1

3

이 .htaccess 파일을 하위 도메인 폴더에 넣으십시오.

RewriteEngine On

RewriteRule ^(.*)?$ ./subdomains/sub/$1

http://sub.domain.com/ 만 표시하려는 경우 http://domain.com/subdomains/sub/로 리디렉션됩니다 .


이 질문은 2012 년에 제기되었으며 8 개의 답변이 있습니다. 이 시점에서 귀하의 답변이 가치를 더합니까?
ppovoski

당신이 방문 하위 도메인에 www를 사용하는 경우이 솔루션은 심지어 작동합니다
로한 Khude에게

2

하위 도메인 디렉토리 리디렉션 :

RewriteCond %{HTTP_HOST} ^([^.]+)\.(archive\.example\.com)$ [NC]
RewriteRule ^ http://%2/%1%{REQUEST_URI} [L,R=301]

0

모든 하위 도메인 요청에 대해 다음을 사용하십시오.

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\.band\.s\.co 
RewriteCond %{HTTP_HOST} ^(.*)\.band\.s\.co 
RewriteCond %{REQUEST_URI} !^/([a-zA-Z0-9-z\-]+) 
RewriteRule ^(.*)$ /%1/$1 [L] 

필요한 하위 도메인 이름과 동일한 폴더를 만드십시오. : 폴더는 다음과 같이 존재해야합니다 domain.com/sub 에 대한 sub.domain.com .


이것은 나를 위해 작동하지만 파일을 유지하지 않습니다. 예를 들어 sub.domain.com/index.php throw 404
Paolo Falomo 2017
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.