2012-02-26 3 views
2

대 htaccess로 다르게 동작 : 나는 htaccess로 파일에 배치 할 경우재 작성 내가 아닌 www가 URL에 www를 재 작성 지침의 다음과 같은 덩어리를 사용하고 가상 호스트

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
    RewriteRule ^(.*)$ http://%1/$1 [R=301,NC,L] 
</IfModule> 

, 그것은 잘 작동합니다.

내가

내가 뭔가를 놓치고 있습니까 domain.com// 될 것입니다 예를 www.domain.com를 들어, 두 개의 슬래시가 호스트에 추가 재 작성 후, 가상 호스트 파일에 배치하면?

또한, 모든 .htaccess 콘텐츠를 vhost에 성능별로 배치 할 가치가 있습니까?

답변

5

RewriteRule은 문서가 말하는 것처럼 행동합니다.

VirtualHost 컨텍스트 & Directory & .htaccess 컨텍스트에있는 경우 RewriteRule과 일치하는 것과 차이가 있습니다. RewriteRule Directive Apache Docs

에서

무엇을 일치?

VirtualHost 컨텍스트에서 패턴은 처음에는 호스트 이름과 포트 다음의 URL 부분과 쿼리 문자열 앞에 일치합니다 (예 : "/app1/index.html").

디렉토리 및 htaccess 컨텍스트에서 패턴을 처음으로 파일 시스템 경로에 일치시킵니다. 서버는 현재 RewriteRule (예 : "app1/index.html"또는 "index.html")에 연결되는 접두어를 제거한 후 지시어가 정의 된 곳).

호스트 이름, 포트 또는 쿼리 문자열과 일치 시키려면 % {HTTP_HOST}, % {SERVER_PORT} 또는 % {QUERY_STRING} 변수와 함께 RewriteCond를 사용하십시오.

그래서, VirtualHostdirectory 맥락에서하지의 서버는 접두사 /이 제거되지 않도록합니다. 또한 VirtualHost 컨텍스트에서 RewriteRule과 일치 할 때 패턴은 항상 /으로 시작합니다.

그래서, 당신의 RewriteRule은 다음과 같아야합니다

RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^/(.*)$ http://%1/$1 [R=301,NC,L] 

상황 VirtualHost에 있습니다.


또한, 그것은 가치가 performancewise 가상 호스트의 모든 htaccess로 컨텐츠를 배치입니까?

예. 한 가지 이유는 페이지에 액세스 할 때마다 파일 (.htaccess)이 읽히지 않기 때문입니다.

+0

훌륭한 솔루션으로 매우 유익한 답변을 보내 주셔서 감사합니다. 도와 주셔서 정말 고맙습니다. – DavidW

+0

@Leo 환영합니다 ... – ThinkingMonkey