2012-02-23 6 views
1

mod_rewrite를 사용하여 특정 도메인을 다른 도메인으로 리디렉션하는 것에 대한 질문이 있습니다. 각 도메인 이름에 대해 별도의 다시 쓰기 규칙을 만들 필요없이이 작업을 수행 할 수있는 가능한 가장 짧은 방법을 찾고 있습니다. 나는 많은 새로운 도메인 이름 (대략 20-30 개의 도메인 합계)을 추가 할 것이다.다른 도메인을 다른 도메인으로 리디렉션

내 기본 도메인 이름이 example.com이고 모든 도메인 이름을 사용한다고 가정 해 보겠습니다. 따라서 다른 도메인 중 하나를 사용하면 하위 도메인 접두어와 URL 경로를 유지하면서 자동으로 기본 도메인으로 리디렉션됩니다.

예 :
test.example.org => test.example.com
test2.example.co.uk => test2.example.com
test3.example.net/hello/world. PHP => test3.example.com/hello/world.php

RewriteEngine on 
RewriteCond %{HTTP_HOST} ^(.*)\.([a-zA-Z]+)\.(.*)$ [NC] 
RewriteRule ^(.*)$ http://%1\.example.com/$1 [R=301,L] 

위에서 제대로하거나 올바른 구문 경우 작동하는지 내가 확실입니다. 하지만 기본적으로 하위 도메인 접두어, 모든 도메인 이름 및 모든 TLD (.org, .info, .biz, .co.uk, .net 등)와 일치하게하고 싶습니다. 무한 리디렉션 루프를 방지하기 위해 먼저 올바른 주 도메인 (example.com)이 아닌지 확인해야한다고 가정합니다.

또한 HTTPS가 켜지거나 꺼져 있는지 확인하고 리디렉션을 올바르게 설정할 수 있습니까? 그렇지 않으면 항상 HTTPS를 ON으로 설정할 수 있습니다.

이 혼란을 드려 죄송합니다. 각 도메인을 .htaccess로 프로그래밍 할 필요없이 처음으로이 권한을 얻고 싶습니다.

감사합니다. :)

답변

2

(. *)은 욕심이 있으므로 사용하고 싶지 않으므로 무한 루프를 다시 만들고 싶지 않다고 가정합니다. 그것은 다시 example.comexample.com로 끝나는 모든 호스트를 리디렉션하고 리디렉션 루프를 얻을 것이기 때문에

RewriteEngine on 

RewriteCond %{HTTPS}s ^..(s?) 
RewriteRule ^   -        [E=PROTO:http%1]    

RewriteCond %{HTTP_HOST} !^\w+\.example\.com$    [NC] 
RewriteCond %{HTTP_HOST} ^(\w+)\.\w+\..+     [NC] 
RewriteRule ^/?(.*)  %{ENV:PROTO}://%1.example.com/$1 [R=301,L] 

+0

이 예제를 사용이 그것은 작업을 수행합니다. 필요한만큼 정확하게 작동하는지 확인하기 위해 몇 가지 추가 테스트를 수행하면됩니다. 자세한 답변 해 주셔서 감사합니다. –

+0

첫 번째 규칙이 작동하는 방식을 이해하고 있습니까? 문자열이 on 또는 off 중 하나입니다. 따라서^1 (s?) 결과가 % 1 = "s"또는 ""이므로 env 변수 PROTO가 올바르게 설정됩니다. Cond2A는 하위 도메인의 '* .example.com' 및 cond2B 파일에 대한 루프를 방지합니다. Rule2B는이 모든 것을 하나로 합친다. 진드기가 작동하면 멋질 것입니다 :-) – TerryE

+0

완벽하게 작동하고 개념을 이해합니다. 내가 겪고있는 한 가지 문제점은 누군가 example.org에 갔다고 말하면서 탐색 할 때까지 example.org에 남아있을 것이라고합니다. 나는 다른 트릭을 시도했지만 메인 "example.com"으로 바꿀 수는 없다. –

1

그 규칙이 작동하지 않습니다. 당신은 .com 종료하지 않습니다 아무것도 일치, 같이하는 정규 표현식을 변경해야

RewriteCond %{HTTP_HOST} ^([^\.]+)\.?([a-zA-Z]+)\.(?:(?!com).)*$ [NC] 
+0

당신은 확실히 내 엉망을 분류했습니다! 유일한 문제는 ".com"도 가진 다른 도메인을 가질 수 있다는 것입니다. –

관련 문제