2010-03-30 8 views
0

알아낼 수없는 mod_rewrite 리디렉션 문제가 있습니다.하위 디렉토리로 리디렉션

특정 도메인의 모든 요청이 지정된 하위 디렉토리에 "자동으로"다시 작성됩니다. 예 : www.mydomain.net/hello.html/net/hello.html에있는 파일을 검색합니다. 다음 (내 호스팅 루트에 위치)의 .htaccess 이 완벽하게 달성 :

RewriteEngine on 
RewriteBase/
RewriteCond %{ENV:REDIRECT_STATUS} 200 # <-- i will need this later. read to the end of the post. 
RewriteRule .* - [L] 
rewriteCond %{HTTP_HOST} ^www.mydomain.net$ 
rewriteCond %{REQUEST_URI} !^/net.*$ 
rewriteRule (.*) /net/$1 [L] 

그러나,이 디렉토리에 직접 URL을하지만 눈에 띄게 하위 디렉토리없이 URL 에 301 리디렉션합니다. 예 : www.mydomain.net/net/hello.htmlwww.mydomain.net/hello.html (아직 /net/hello.html에있는 파일을 검색하는 것)으로 리디렉션해야합니다. (/net에 위치)이 내 .htacces 파일은 불행히도 작동하지 않습니다

RewriteEngine on RewriteBase/ RewriteCond %{HTTP_HOST} ^localhost$ RewriteRule ^(.*) /$1 [R=301,L] 

내가이 부정사를 얻을 루트 htaccess로 파일에 RewriteCond %{ENV:REDIRECT_STATUS} 200 블록에도 불구하고 루프를 재 ... 그래서 무슨 일이야?

btw, modyrewrite를 사용해야합니다. 사이트가 외부로 호스팅되어 있고 아파치 설정에 액세스 할 수 없기 때문입니다.

많은 포인터에 대해 감사드립니다.

답변

1

대신 HTTP request lineTHE_REQUEST에서 검사 :

RewriteCond %{THE_REQUEST} ^GET\ /net[/? ] 
RewriteRule ^net($|/(.*)) /$2 [L,R=301] 
+0

감사가 검보! THE_REQUEST를 사용하면 루프를 우회합니다. 그러나 .htaccess 파일이 하위 디렉토리 "net"에서 실행되기 때문에 RewriteRule 행을 "RewriteRule^(. *)/$ 1 [L, R = 301]"으로 변경해야했습니다. – halloleo

관련 문제