2012-09-24 2 views
1

.htaccess 구성과 관련하여 이상한 상황이 있습니다. 도메인마다 하나의 디렉토리가있는 멀티 도메인 호스팅이 있습니다. 예를 들어 , 내가 가진 :.htaccess RewriteRule은 슬래시가 없을 때 주소 표시 줄 URL을 변경합니다.

http://www.domain1.com 
http://www.domain2.com 

다음과 같은 디렉토리 구조 :

/domain1/ 
/domain1/index.php 
/domain2/ 
/domain2/index.php 
/domain2/subdirectory/ 
/domain2/subdirectory/index.php 

다음과 같은 내용으로 .htaccess 파일 :

RewriteEngine On 

RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/domain1/.*$ 
RewriteRule ^(.*)$ domain1/$1 [L] 

RewriteCond %{HTTP_HOST} ^(www\.)?domain2\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/domain2/.*$ 
RewriteRule ^(.*)$ domain2/$1 [L] 

모든 일을 내가 하나를 원하는대로 예외 : 내가하는 경우 :

내가 할 경우 내용이 propertly로 보여 주소 표시 줄에 URL (끝에 슬래시) 를 변경 유지하지만, :

http://www.domain2.com/subdirectory 

(끝에 슬래시없이) 내용이 제대로 보여 되나 주소 표시 줄에 URL이 변경됩니다 :

http://www.domain2.com/domain2/subdirectory/ 

(하위 디렉토리 이름을 발견하고 슬래시가 마지막에 추가됩니다) 와 나는 사용자가 그 변화를 볼 좋아하지 않는다 주소 바, 그게 내 문제 야.

답변

1

이것은 URI 파일 매핑 파이프 라인을 방해하는 mod_dirDirectorySlash입니다. 기본적으로 DirectorySlash이 켜져 있습니다. 아파치가 디렉토리에 대한 요청이라고 생각하고 그 뒤에 슬래시가 없다면, 으로 리디렉션되고 뒤에 슬래시가 있습니다. 이 작업을 수행하는 데는 충분한 이유가 있습니다. because of a possible information disclosure security concern.

DirectorySlash Off 

을 그리고 아파치는 전혀 후행 슬래시로 리디렉션되지 않습니다 당신이 디렉토리 인덱싱을 허용하지 않는 경우, 당신은 단지 그것을 해제 할 수있다. 또는 다시 쓰기 엔진의 일부로 자신을 리디렉션 할 수 있습니다. 내부적으로 재 작성된 URL이 노출되는 이유는 2 개의 모듈이 URI, mod_dir 및 mod_rewrite를 망가뜨려 서로를 인식하지 못하기 때문입니다. 그래서 URI가 mod_rewrite에 의해 다시 쓰여지고 mod_dir이 나타나고 "this is a directory!"라고 쓰여지고 URI에 좀 더 자세한 내용을 추가하기 위해 후행 슬래시를 추가하고 리디렉션 응답을 플래그로 지정합니다. 결국 맹 글링 된 URI가있는 리디렉션입니다. mod_rewrite에서 리디렉션을 처리하면 mod_dir에 도달 할 때까지 모든 것이 복숭아가됩니다.

이러한 솔루션은 완벽하게 작동, 대단히 감사합니다, 현재 규칙

RewriteCond %{HTTP_HOST} ^(www\.)?domain1\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/domain1/.*$ 
RewriteCond %{DOCUMENT_ROOT}/domain1%{REQUEST_URI} -d 
RewriteRule ^(.*[^/])$ /$1/ [L,R=301] 

RewriteCond %{HTTP_HOST} ^(www\.)?domain2\.com$ [NC] 
RewriteCond %{REQUEST_URI} !^/domain2/.*$ 
RewriteCond %{DOCUMENT_ROOT}/domain2%{REQUEST_URI} -d 
RewriteRule ^(.*[^/])$ /$1/ [L,R=301] 
+0

안녕 존 이상 할 필요가있다. 처음에는 작동하지 않는다고 생각했지만 브라우저 캐시를 지울 필요가있었습니다. – Angel

관련 문제