2010-08-11 4 views
1

다음과 같은 방법으로 htaccess를 통해 가상 하위 도메인을 만들고 싶습니다.htaccess mod 다시 쓰기 - 가상 하위 도메인을 만드는 방법은 무엇입니까?

http://www.domain.com/user.php?id=testuser&var1=1&var2=2&var3=3 

그러나 이러한 다시 쓰기가 user.php 사용하지 않아야하지만 index.php를이 경우에 사람이 들어갈 :

입력하기 :로

http://testuser.domain.com/1/2/3/ 

가 처리되어야

http://www.domain.com or http://domain.com 

이것은 지금까지 얻은 것입니다. 그러나 작동하지 않는 것 같습니다. 모드 재 작성 전문가의 도움을 주시면 감사하겠습니다. 미리 감사드립니다.

Options +FollowSymLinks 
Options +Indexes 
RewriteEngine On 
RewriteBase/

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC] 
RewriteRule ^(.*)/?(.*)/?(.*)/?$ index.php?var1=$1&var2=$2&var3=$3 [NC,QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} !^(www|mail).domain.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+).domain.com$ [NC] 
RewriteRule ^(.*)/?(.*)/?(.*)/?$ user.php?id=%2&var1=$1&var2=$2&var3=$3 [NC,QSA,L] 

답변

2

귀하의 규칙은 실제로 원하는 것에 매우 가깝습니다. 내가 볼 수있는 유일한 문제는 두 개의 RewriteRule 문에 대한 테스트 패턴입니다. 현재,이에 해당 될 일이있는 ...

RewriteRule ^(.*)/?(.*)/?(.*)/?$ ... 

있습니다

아직 아무것도 일치하지 않고 할 수있는 첫 번째 캡처 그룹 과거의 모든 것이되도록 일치로 간주 될 수 있기 때문입니다
RewriteRule ^(.*)$ 

첫 번째 그룹은 욕심이 많고 패턴의 다른 부분을 연기 할 필요없이 전체 입력 문자열을 일치시킵니다. 그들이 여기 변수 구분 기호로 사용되는 것 같은, 어쨌든 슬래시를 캡처 안 캡처 그룹 이후

는 간단 수정도록, [^/]*으로 변경하는 것입니다

편집 : 나는 또한 /index.php의 경우 !-f 조건을 무시하도록 두 번째 그룹에 설정된 RewriteCond을 수정했습니다. 도메인 후 아무 것도 지정하지 않고 하위 도메인을 요청하면이 상태가 발생합니다.

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} ^(www\.)?domain.com$ [NC] 
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?$ index.php?var1=$1&var2=$2&var3=$3 [NC,QSA,L] 

RewriteCond %{REQUEST_FILENAME} !-f [OR] 
RewriteCond %{REQUEST_URI} ^/index.php 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{HTTP_HOST} !^(www|mail).domain.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(www\.)?([a-z0-9-]+).domain.com$ [NC] 
RewriteRule ^([^/]*)/?([^/]*)/?([^/]*)/?$ user.php?id=%2&var1=$1&var2=$2&var3=$3 [NC,QSA,L] 
+0

안녕하세요, Tim 빠른 답장을 보내 주셔서 감사합니다. htaccess 파일을 변경했는데 문제가 다른 곳에 있다고 생각됩니다. user.php 파일은 변수가 입력 될 때만 표시됩니다. 예를 들면 다음과 같습니다. http://www.domain.com/ -> (index.php를 보여줍니다) http://domain.com/1/2/3/ -> (색인을 보여줍니다. php) http://testuser.domain.com/1/2/3/ -> (user.php 보여주기) 지금까지 그렇게 좋았지 만 : http://testuser.domain.com/ - > (index.php를 보여줍니다) 추가 변수 없이도 하위 도메인에 대해 항상 user.php가 표시되도록 어떻게 만들 수 있습니까? 최고 감사합니다. – Yah

+0

오, 아, 한 가지 시나리오는 테스트하지 않았습니다. 내가 알아서 할 편집을하겠습니다. –

+0

안녕하세요, 다시 조정했지만 여전히 작동하지 않습니다. 마지막 편집 덕분에 http://testuser.domain.com/index.php는 이제 user.php 파일을 올바르게 보여줍니다. 그러나 http://testuser.domain.com/처럼 user.php 파일 대신 index.php 파일을 계속 표시합니다. – Yah