2012-12-27 2 views
0

리디렉션 규칙이 조금 잘못되었습니다. 긴 연설보다 더 리틀 예를 들어, 여기에 큰 추함을 간다 :다시 쓰기 규칙의 하위 도메인 재사용

IndexIgnore * 
ErrorDocument 404 http://www.example.com 
RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteRule ^([^\.]+)\.example\.com$ http://example.com/private/$1/public/si.php [L] 

내 목표는 하위 도메인 ([^\.]+)을 얻고 $1 대신 리디렉션에 사용하는 것입니다.

http://example.com/private/test/public/si.php 어떤 도움 주셔서 감사에 예를 들어, test.example.com 리디렉션합니다.

감사합니다, S.

최종 작업 htaccess로 :

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{REQUEST_URI} !^/private/ 
RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC] 
RewriteRule^/private/%1/public/$1 [R=301,L] 

anysub.example.com/anypage

답변

2

전년도와 일치하는 데 사용되는 문자열 RewriteRule의 패턴은 이 아니며에는 호스트 이름, URI 및 쿼리 문자열이 포함되지 않습니다. 실제 URI가 무엇인지 무시해야한다면 RewriteRule에 패턴과 일치하는 패턴이 필요하지 않습니다. 당신은 당신은 리디렉션 영구적으로 규칙의 대괄호에 R=301 플래그를 추가 할 수 있습니다 RewriteCond

RewriteEngine on 
RewriteCond %{HTTP_HOST} !^www\. [NC] 
RewriteCond %{HTTP_HOST} ^([^.]+)\.example\.com$ [NC] 
RewriteRule^http://example.com/private/%1/public/si.php [L] 

에 이전 그룹화를 역 참조하는 %를 기호를 사용할 필요가 것입니다.

+0

필터링하는 방법은 RewriteCond를 사용하는 경우, 나는 무엇 rewriterule의 패턴을 사용하지 않습니다. 설명해 주시겠습니까? 또한 브라우저에서 표시되는 URL이 짧은 것 (예 : test.example.com) 이었으면 좋겠다. 그것은 번역 된 것처럼 보이므로 완전한 것을 보여줍니다. – Sebas

+0

@Sebas'^'문자는 단지 "URI의 시작"을 의미합니다. 실제로는. *와 다를 바 없습니다. 본질적으로 모든 것과 일치합니다. 브라우저를 리디렉션하지 않으려면 (** 리디렉션 ** 항상 ** 브라우저의 URL 주소 표시 줄에있는 내용을 변경하십시오) 규칙 대상에서 http : // example.com을 제거하십시오. –

+0

완벽, 재귀적인 리다이렉션과 보일을 피하기 위해 필터를 추가해야했습니다! 당신의 도움을 주셔서 감사합니다 – Sebas

1

anysub.example.com/private/anysub/public/anypage에하는 조건 역 참조를 다시 시도 리디렉션

RewriteCond %{HTTP_HOST} ([^\.]+).example.com [NC] 
RewriteRule ^.*$ http://example.com/private/%1/public/si.php [L] 
+0

감사합니다. 작동하고 있습니다. Jon의 답변은 약간 더 자세하게 설명 되었기 때문에 나는 그의 자리를 받아 들일 것이다. 감사합니다 다시 및 StackOverflow에 오신 것을 환영합니다 – Sebas

관련 문제