2012-10-26 2 views
0

If, else 호스트/도메인 이름을 기반으로하는 재 작성 규칙을 결합 할 수있는 코드 유형을 찾고 있습니다. 따라서 도메인 이름이 "domainA"이면 b, c를 d로 리디렉션하고 도메인 이름이 "domainB"인 경우 x를 y로, z를 z로 리디렉션합니다. 내가 아래에했던 것처럼 기본적으로 나는 다시 다시 조건을 쓰고 싶지 않아 :htaccess에서 RewriteCond를 결합하는 방법

내가 작성한을 나는 여러 도메인을 지적했기 때문에 위의 내가 호스트를 사용하고 있습니다에서 htaccess로

RewriteCond %{HTTP_HOST} ^domain\.com$ [OR] 
    RewriteCond %{HTTP_HOST} ^www\.domain\.com$ 
    RewriteRule ^home /? [L,R=301] 

    RewriteCond %{HTTP_HOST} ^domain\.com$ [OR] 
    RewriteCond %{HTTP_HOST} ^www\.domain\.com$ 
    RewriteRule ^home-old /? [L,R=301] 

에 대한 다음 코드 동일한 호스팅 공간이므로 htaccess는 모두 공통입니다.

특정 도메인의 일부 리디렉션 세트에 대해 domai name을 몇 번 쓰는 대신 도메인에 대한 여러 조건을 하나로 결합 할 수 있습니까?

감사합니다.

답변

1

mod_rewrite에는 if-then-else 구조가 없습니다. 당신은 당신의 규칙 (때로는 그것들을 읽을 수 없게하거나 수정할 수 없도록 만든다)에 영리해야하거나 모든 것에 대해 명백하게해야합니다. 구체적인 예를 들어

, 당신은 단지 그들을 결합하는 정규 표현식을 사용할 수 있습니다

^domain\.com$^www\.domain\.com$^(www\.)?domain\.com$

^home^home-old으로 점등되고 있습니다 만 ^home을 처음부터 만 home으로 시작하고 home-old이 실제로로 시작하는 경우 일치합니다.(문자열의 끝을 나타내는 $ 기호는 없습니다). 그래서 당신이보고있는 :

RewriteRule ^home(-old)?$ /? [L,R=301] 

편집 :

당신이 $를 사용하여 특정 할 필요가있는 경우

RewriteCond %{HTTP_HOST} ^(www\.)?domain\.com$ [NC] 
RewriteRule ^home /? [L,R=301] 

, 당신은 단지 정규식을 변경할 수 있습니다

집, botique 및 hairtips 대신 다른 몇 가지 URL이 있으면 매번 RewriteCond를 작성해야합니까? 나는 때마다 그냥 확인하는 것을 작성해야 추측에서 당신

예, 조건마다 반복하거나, 당신이 규칙의 맨 처음에 통과를 할 수 있습니다

RewriteCond %{HTTP_HOST} !^(www\.)?domain\.com$ [NC] 
RewriteRule^- [L] 

의미 : 호스트에 대한 요청이 아닌 모든 것 : www.domain.com 또는 domain.com은 다시 작성하지 않고 통과합니다. 위의 호스트가 아닌 다른 호스트의 요청 만 해당 규칙에 도달하므로이 규칙을 적용하면됩니다.

이것은 이전에 언급 한 "똑똑한"비트입니다.엄격한 조건을 맨 위에 설정했기 때문에 규칙을 변경하거나 나중에 수정하는 것이 까다로울 수 있습니다.

+0

집, botique 및 hairtips 대신 다른 몇 가지 URL이 있으면 매번 RewriteCond를 작성해야합니까? 나는 매번 당신에게서 확인하는 것을 써야만한다고 생각합니다. 제발 조언. – Prashant

+0

@Prashant 예, 매번 편집해야합니다. 편집을 참조하십시오. –

관련 문제