2011-08-10 3 views
2

모든 하위 도메인을 폴더에 매핑하려고합니다. 예를 들어 subdomain.domain.com를 들어
Apache를 사용하는 하위 도메인 mod_rewrite 관련 문제

RewriteCond %{HTTP_HOST} ^(.+)\.oomail\.org 
RewriteCond %{HTTP_HOST} !^www\.oomail\.org [NC] 
RewriteRule ^(.+)$ /var/www/clients/%1/$1 

나는 500 내부 서버 오류가 발생했습니다 (투명하게) domain.com/clients/subdmain의 내용을 표시해야한다. 내가 추가 문제 [R] 플래그

RewriteRule ^(.+)$ /var/www/clients/%1/$1 [R] 

내가 주소 표시 줄에서이 결과를 가지고 무슨 확인하려면

http://q1.oomail.org/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/var/www/clients/q1/always.html 

는 다음 나는 $ _GET 변수 세부 사항을 덤프하는 details.php 파일을 만들었습니다. 그 내용이

<pre> 
<?php 
var_dump($_GET); 
?> 
</pre> 

및 수정한다 RewriteRule입니다 (참고 : 나는 그것의 내용 보여주는 details.php에 $ 1 % 1을 보내고 ) http://subdomain.oomail.org/file.html을 연 후

RewriteRule ^(.+)$ details.php?p=%1&d=$1 

과, I 출력을 가지고 변수 P 가 올바른지 그중

array(2) { 
    ["p"]=> 
    string(9) "subdomain" 
    ["d"]=> 
    string(11) "details.php" 
} 

같은 "스와 인 (1 %의 값) bdomain "이라고 말하면서 URL에 열어 본 file.html이 될 것으로 예상되는 details.php는 d ($ 1 값)입니다. 내가 어디로 잘못 가고 있니? 또는 매핑을 위해 file.html (URI)을 변수로 가져올 수있는 방법은 무엇입니까?

답변

5

사용이 규칙 :

RewriteEngine on 
RewriteCond %{REQUEST_URI} !^/clients/ 
RewriteCond %{HTTP_HOST} ^(.+)\.oomail\.org 
RewriteCond %{HTTP_HOST} !^www\.oomail\.org 
RewriteRule ^(.*)$ /clients/%1/$1 [L] 

의 첫 번째 시도에서 당신은 아파치 (기본값 더 이상 10 이상의 반복에 의해) 중단했다 끝없는 재 루프했다. 두 번째 시도에서 당신은 한정된 재 작성 루프 (2 번의 반복, 나는 믿는다)에 직면 해있다. 이것이 mod_rewrite가 작동하는 방식이며 규칙에서 그러한 가능성을 계산해야합니다. 특히 일치 패턴으로 .*을 사용하는 경우 특히 그렇습니다.

내 규칙의 첫 번째 조건은 재 작성 루프가 발생하지 못하도록합니다 (규칙은 매우 첫 번째 반복에만 작동 함을 의미합니다). 불행히도 이는 몇 가지 제한 사항을 의미합니다. /clients/으로 시작하지 못할 수 있습니다. 예 :이 URL은 리디렉션되지 않습니다 (http://something.example.com/clients/hello-kitten.php).

솔루션-이름 바꾸기 더 독특한 뭔가 clients 폴더 : 예를 _clients_folder_에 대한 (당신은 분명뿐만 아니라, 다시 쓰기 규칙이 폴더를 변경해야 할 것입니다).

읽는 것 : RewriteRule Last [L] flag not working?