2011-10-05 1 views
0

와일드 카드 하위 도메인을 실행 중입니다. 사이트의 목표는 가상 하위 도메인을 실행하는 것입니다. 그 기능은 메인 사이트의 파일 이 호출 될 때 깨끗한 URL을 위해 다시 쓰여지는 것입니다. 하지만 같은 파일을 하위 디렉토리 (예 : xyz.doamin.com/my-file.php)과 같은 형식으로 호출 할 때는 domain.com/my-file과 같은 subdoamin 인수로 해당 파일을 호출하는 것처럼 다시 작성해야합니다. PHP? var = xyz. 현재 파일 호출에 대해 수행 한 작업은 다음과 같습니다.특정 인수를 사용하여 하위 도메인 및 기본 사이트에 대한 파일 요청을 리디렉션합니까?

Options +FollowSymLinks 
RewriteEngine on 

## Redirecting all non-www domains to www.domain.com 
RewriteCond %{HTTP_HOST} ^domain.com [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,NC,L] 


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?var=%1 [L] 


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?%{QUERY_STRING}&var=%1 [L] 



RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{QUERY_STRING} ^$ 
RewriteRule ^(.*)$ http://www.domain.com/index.php?subdomain=%1 [L] 


RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteCond %{QUERY_STRING} !^$ 
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?%{QUERY_STRING}&subdomain=%1 [L] 

파일 호출에 대해 500 개의 내부 오류가 발생했습니다.

답변

0

규칙 세트 4는 규칙 세트 1 및 2와 겹칠 것입니다. 이것이 문제의 원인 일 것으로 생각됩니다. 그래서 나는 모든 사람이 REQUEST_URIRewriteCond 체크를 추가해야한다고 생각합니다.

정말로 규칙 세트 4는 필요하지 않습니다. 기본값으로 index.php를 포함하면 트릭을 수행해야합니다. 물론 http://www.domain.com/?var=xyz과 같은 URL을 원하지 않는 한 규칙 4는 필요하지만 규칙 1과 2와 마찬가지로 QUERY_STRING과 2 개의 규칙으로 분리해야합니다.

또한 isn 't %1 rewriteRule 자체에서 rewritex가 아니라 rewriteConds? 그렇다면 원래의 전체 URL로 var=을 설정하므로 정규 표현식이 잘못되었습니다.

오류 로그를 보는 것은 500 오류의 원인을 알려주는 좋은 아이디어입니다.

편집 : 도달 내부 리디렉션의 최대 수 : 좋아,이 같은 (안 테스트)

## Redirecting all non-www domains to www.domain.com 
RewriteCond %{HTTP_HOST} ^domain.com [NC] 
RewriteRule ^(.*)$ http://www.domain.com/$1 [R=301,L,QSA] 

## Redirecting/requests to index.php 
# Note: Use the QSA flag for handling with or without query string 
RewriteCond %{REQUEST_URI} ^/$ 
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com/index.php?var=%1 [L,QSA] 

## Redirecting /something requests to index.php 
# Note: Use the QSA flag for handling with or without query string 
RewriteCond %{REQUEST_URI} ^/.+$ 
RewriteCond %{HTTP_HOST} !^www\.domain\.com$ [NC] 
RewriteCond %{HTTP_HOST} ^(.*)\.domain\.com$ [NC] 
RewriteRule ^(.*)$ http://www.domain.com%{REQUEST_URI}?var=%1 [L,QSA] 
+0

로그인이 줄 :: mod_rewrite를을 가지고 오류를보십시오. 구성 오류가 있다고 가정합니다. 필요한 경우 제한을 늘리려면 'RewriteOptions MaxRedirects'를 사용하십시오. – HardCode

+0

네, 규칙 세트 4가됩니다. 'HTTP_HOST'는 절대로 변경되지 않으므로 결과에 따라 계속 일치하게됩니다. 내가 말했듯이 너는 그것을 완전히 버리는 것이 가장 좋다. – Sodved

+0

'@ Sodved' 수정 된 코드를 참조하십시오. 이 뜻 이니? – HardCode

관련 문제