2

다음 문제를 고려하십시오. 내가 좋아하는 계층 하위 도메인에 domain.tld와 가지고 다음 웹 루트에 가상 디렉토리 구조도 있습니다mod_rewrite : 계층 적 하위 도메인을 계층 적 하위 디렉터리로 구성

a.domain.tld 
b.a.domain.tld 
c.b.a.domain.tld 
... etc. 

:

/foo 
/a. 
/a./b. 
/a./b./bar 
/a./b./c. 
... etc. 

가 나는 등의 재 작성을 달성하고자하는 그 것 아파치가 아래에 보이는 것과 같은 방법으로 디렉토리를 제공하게한다.

a.domain.tld  --> /a. 
b.a.domain.tld --> /a./b. 
c.b.a.domain.tld --> /a./b./c. 
... etc. 

도트 문자가없는 디렉토리는 정상적인 하위 디렉토리처럼 작동합니다.

domain.tld/foo/ --> /foo 
a.b.domain.tld/bar --> /a./b./bar 

mod_vhost_alias를 사용할 수 없으며 해결책이 mod_rewrite만을 사용하여 달성 할 수 있다면 기뻤습니다. 그런 재 작성을 달성 할 수 있습니까?

귀하의 모든 조언에 감사드립니다.

-
NKD

답변

0

당신이 RewriteMap를 통해 부품이 외부 스크립트에 되돌릴 수 전송하고 그것을 처리있는 경우에 가능하다. 하위 도메인의 4 개 수준

+0

안녕하세요. 빠른 응답에 감사드립니다. 나는 RewriteMap을 안다. 가능한 경우 사용하지 않는 것이 좋습니다. 그렇지? – nkd

+0

분할, 역전, 결합하는 mod_rewrite의 기본 제공 기능이 없습니다. –

+0

감사합니다. 예를 들어 하위 수준의 10 개 수준에 대해 10 세트의 규칙을 작성해야한다는 의미입니다. 누구나 처음 2 단계에 대해 올바른 방법을 제시해 줄 수 있습니까? (나는 쉽게 다음 8 가지를 도출 할 것입니다.) 계층 구조는 약 10 또는 12 수준으로 겹치지 않습니다. – nkd

1

가능한 해결 방법 :

RewriteCond %{HTTP_HOST} ^([^\.]+)\.domain\.tld 
RewriteRule (.*) %1./$1 [R,L] 

RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.domain\.tld 
RewriteRule (.*) %2./%1./$1 [R,L] 

RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)\.domain\.tld 
RewriteRule (.*) %3./%2./%1./$1 [R,L] 

RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)\.domain\.tld 
RewriteRule (.*) %4./%3./%2./%1./$1 [R,L] 

감사합니다.

-
NKD는

1

이전의 솔루션은 매우 재미 무한 리디렉션 루프에서 끝납니다. 여기에 지금있어 솔루션 (안 매우 우아하지만, 작동,하지만 거대한 '하지만'으로)입니다 : (지옥) 작동 왜

# Working solution for five levels of sub-domains 

RewriteEngine on 

RewriteCond %{HTTP_HOST} ^([^\.]+)\.DOMAIN\.TLD [NC,OR] 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.DOMAIN\.TLD [NC,OR] 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)\.DOMAIN\.TLD [NC,OR] 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)\.DOMAIN\.TLD [NC,OR] 
RewriteCond %{HTTP_HOST} ^([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)\.([^\.]+)\.DOMAIN\.TLD [NC] 

RewriteRule (.*) http://DOMAIN.TLD/%5./%4./%3./%2./%1./$1 [R,L] 

누군가 나에게 설명 할 수 있습니까? 정말 효과가 있으며 광범위하게 테스트했습니다. 그러나 실제로 작동하는 이유는 무엇입니까? 내가 RewriteRule 라인을 보면 나는 그것이 작동해야한다고 생각하지 않는다 ... 당신의 설명에 감사드립니다.

BTW : 위의 다섯 가지 다시 쓰기 조건과 규칙이 작동하는 경우 일종의 '두 줄짜리'(하나의 조건과 하나의 규칙)로 다시 쓸 수있는 것처럼 보입니다. 나는 위의 규칙 대신 위에서 주어진 다섯 개 가지 조건 다음의 조건을 사용하여, 이미 시도 :

RewriteCond %{HTTP_HOST} ^(([^\.]+)\.)+DOMAIN\.TLD [NC] 

을하고 조금으로하지만 실제 성공했다. 모든 아이디어를 주셔서 감사합니다. 을 다시 작성하고 가능한 한 '제정신'으로 만드십시오.

-
NKD